私はstackoverflow
の新しいユーザーです。私はこのコードをcで書いたが、問題はなく出力は正しい。c(セグメンテーションフォルト)でファイルを読み取るためにfscanfを使用するにはどうすればよいですか?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str[10];
FILE * fp;
fp = fopen ("file.txt", "w+");
fputs("We\nare\nin\n2016", fp);
rewind(fp);
fscanf(fp, "%s", str[0]);
fscanf(fp, "%s", str[1]);
printf("Read String1 |%s|\n", str[0]);
printf("Read String2 |%s|\n", str[1]);
fclose(fp);
return(0);
}
しかし、char * str [10]の代わりにchar * str [15]を使用すると、結果はセグメンテーションフォルトになります。なにが問題ですか?
'str'配列の各ポインタはどこにポイントしていますか?プログラムが*未定義の動作*をしていると思われるからといって正しいとは限りません。 –
そしてなぜこれはstr [10]に対して正しいのですか?私もstr [15]を初期化しましたが、動作しません。 –
'char * str [10]'、それは動作するように見える純粋な運です(良いか悪いのかは遠近法の問題です)。ちょうど*うまくいくように見えますが、メモリは一見無作為に上書きされます。覚えておいて、定義されていない動作の可能性のある症状の1つは、残念ながら実際に動作することです。 –