前提・実現したいこと
C言語で、char型のポインタに文字列を代入したい。
ファイルからfgetcで文字を一文字ずつ読み込み、空白か改行までの文字列を単語として認識した後、それをポインタに代入したい。
どうしても配列ではなくポインタを使いたい。
試して成功したこと
一度配列を作り、それをポインタに渡した。
C
1 char str[40], *w; 2 int ch, n; 3 4 n = 0; 5 while ((ch = fgetc(fp)) != EOF) { 6 if (ch != ' ' && ch != '\n') { 7 str[n++] = ch; 8 } else { 9 str[n] = '\0'; 10 w = str; 11 printf("%s\n", w); 12 n = 0; 13 } 14 }
実行結果(成功)
$ ./a.out it is a wonderful idea!
試したが失敗したこと
直接ポインタに渡す。//が付いている行でSegmentation fault: 11が発生。
C
1 n = 0; 2 while ((ch = fgetc(fp)) != EOF) { 3 if (ch != ' ' && ch != '\n') { 4 *w = ch; // Segmentation fault: 11 5 w++; 6 } else { 7 *w = '\0'; // Segmentation fault: 11 8 printf("[%s]\n", w); // Segmentation fault: 11 9 n = 0; 10 } 11 }
実行結果(失敗)
$ ./a.out Segmentation fault: 11
なぜ後者の実装方法ではいけないのか教えていただきたいです。
よろしくお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。