ファイルを文字列に読み込んで古いプログラムから文字列を出力するコードをコピーしました。それは問題なく動作していたので、少し修正することにしました。新しいプログラムは変数に代入すると完全に関係のない関数でセグメンテーションフォールトが発生する
#include <stdio.h>
#include <string.h>
int main() {
FILE *itemlist = fopen("itemlist", "r");
char *currentstring, charbuffer[2];
// char itemstart = 0;
while (fgets(charbuffer, 2, itemlist)) {
strcat(currentstring, charbuffer);
}
printf("%s", currentstring);
return 0;
}
です。期待どおりに動作します。しかし、itemstart
行のコメントを外すと、セグメント化エラーが発生します。私もそれを使用していないと私の限りでは、0にcharを初期化することは違法ではありません。私はそれが型の問題だと思っていましたが、それを短いものに変更してからintに変更しましたが、それでもなおsegfaultを与えていました。
しかし、私は= 0
の部分を取り除きました、そして、それは再び働きました。その後、gdbでバイナリをデバッグし、segfaultはstrcat
になりました。
これはどのように可能ですか?
「currentstring」は何を指していますか? – geekosaur
現時点では何も表示されていませんが、空の文字列です。 'currentstring'をNULLにすると、segfaultsになります。 – user1002327
それは修辞的だった。あなたは正しい、それは*何も指していない*。ランダムなメモリ。ランダムなメモリを変更するとどうなると思いますか?あなたはどこにそれを指し示すつもりだったと思いますか? – geekosaur