谁能帮我解决我的困境?当我编译我的程序时,我没有收到任何错误或警告。但是,当我实际运行可执行文件时,会出现分段错误。如果我理解正确的话,这是因为指针被错误地使用了。我在 feof(srcIn) 行上收到一个特定错误,我不知道为什么。除了程序开始时的 srcIn = fopen(argv[0], "r") 值之外,FILE* srcIn 永远不会被分配新值。我最初用 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++;
}
编辑:我忘了提到当我遇到段错误时,我什至没有真正进入 main 。这使我相信可执行文件本身存在某种问题。gdb 告诉我 seg 错误在线发生:有什么
if(feof(srcIn))
想法吗?