Cの文字列関連の質問です。よろしくお願いします。
Cの文字列関連の質問です。よろしくお願いします。
『読み込んだ文字列がナル文字を含めて15文字以下であれば、その文字列をそのまま格納し、そうでない場合、読み込んだ文字列の先頭14文字とナル文字を格納する』
という条件を満たすプログラムを作成しました。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
int num;
char (*p)[15];
printf("文字列の個数: ");
scanf("%d", &num);
p = (char (*)[15])malloc(num * 15);
if (p == NULL)
puts("記憶域の確保に失敗");
else {
int i;
char tmp[100];
/* 書込み */
for (i = 0; i < num; i++) {
printf("p[%d]: ", i);
scanf("%s", tmp);
sprintf(p[i], "%.14s", tmp);
}
/* 表示 */
for (i = 0; i < num; i++)
printf("p[%d]: %s\n", i, p[i]);
free(p);
}
return 0;
}
この場合は、ちゃんと条件を満たした結果が出ました。
ここで24行目の『sprintf(p[i], "%.14s", tmp);』を『strncpy(p[i], tmp, 14);』に変更する明らかに結果がおかしくなります。
strncpyを使った方法に変更する場合、どのように修正を行えばいいのでしょうか?
長々と書いてしまいましたが、よろしくお願い致します。
お礼
あっ、なんか解決しました。大ジョブです。ありがとうございます。
補足
splitは配列に格納されないし、一文字取りだしの方は文字化けして取れません。 printにしてもダメですねぇ。