誰かが私のジレンマを解決するのを手伝ってくれますか? プログラムをコンパイルしても、エラーや警告は表示されません。ただし、実際に実行可能ファイルを実行すると、セグメンテーション エラーが発生します。私の理解が正しければ、これは要するにポインターが間違って使用されているために発生します。feof(srcIn) 行で特定のエラーが発生しましたが、その理由がわかりません。FILE* srcIn には、プログラムの先頭にある srcIn = fopen(argv[0], "r") 値以外の新しい値が割り当てられることはありません。私はもともとこのソリューションを C++ で実装していましたが、理由により C に変更する必要がありました。とにかく、C++ では、条件として srcIn.eof() を使用し、読み取りメソッドとして srcIn.get(something) を使用することを除いて、本質的にまったく同じことを行いました。問題なくコンパイルして実行できました。
int chara;
int line[maxLineLength+1];
void nextch(void){
const int charPerTab = 8;
if(charCounter == charLineCounter){
if(feof(srcIn)){
printf("\n");
isEOF = TRUE;
return;
}
printf("\n"); lineCounter++;
if(chara != '\0'){ printf("%c", line[charLineCounter-1]); } // first character each line after the first line will be skipped otherwise
charLineCounter = 0; charCounter = 0;
while(chara != '\n'){
chara = fgetc(srcIn);
if(chara >= ' '){
printf("%c", chara);
line[charLineCounter] = chara; charLineCounter++;
}
else if(chara == '\t'){ // add blanks to next tab
do{ printf(" "); line[charLineCounter] = ' '; charLineCounter++; }
while(charLineCounter % charPerTab != 1);
}
}
printf("\n"); line[charLineCounter] = chara; charLineCounter++; line[charLineCounter] = fgetc(srcIn); charLineCounter++;
// have to get the next character otherwise it will be skipped
}
chara = line[charCounter]; charCounter++;
}
編集:セグフォルトが発生したときに、実際にはメインにさえ入っていないことを忘れていました。これにより、実行可能ファイル自体に何らかの問題があると思われます。gdb は、セグメント障害が次の行で発生していることを教えてくれます:
if(feof(srcIn))
何かアイデアはありますか?