我正在尝试一次读取一行文件,打印出该行,然后分析每个字符以确定如何处理它(所有分析都在驱动程序中进行,如果是,则将其标记为错误字符是除字母或数字之外的任何字符)
我当前的输入文件是:
Hello$ is
asd
所以我正在做的就是一次读一行:
char GetSourceChar() {
char line[MAXLINE];
if (changeLine == 1) {
if (fgets(line, sizeof line, file) != NULL) {
char str1[10];
sprintf(str1,"%d", row); // convert int to 'string'
printf("[");
printf(str1);
printf("] ");
fprintf(outFile, "%s", "[");
fprintf(outFile, "%s", str1);
fprintf(outFile, "%s", "] ");
printf("%s", line);
fprintf(outFile, "%s", line);
changeLine = 0;
}
}
char c = line[col];
if (c == '\r'){
changeLine = 1;
row++;
col = 0;
}
col++;
return c;
}
然后这是我的输出:
[0] hello$ hi
^
Incorrect Character
[1] asd
这正是我希望它看起来的样子,但是如果我将输入文件更改为更长的单词,它就不起作用了?我注意到错误发生在我说
的地方char c = line[col]
它不返回正确的字符,只返回\ 000,因此在此之后似乎没有任何工作正常。
有什么想法吗?
答案 0 :(得分:1)
line
数组在本地声明为GetSourceChar()
,因此在调用之间超出范围。因此,在函数返回后,其内容可能(或可能不会)被覆盖,并且下次调用函数时它可能(或可能不)包含意外值。
您可以通过以下方式解决此问题:
static
,或此外,您可以替换所有这些
char str1[10];
sprintf(str1,"%d", row); // convert int to 'string'
printf("[");
printf(str1);
printf("] ");
fprintf(outFile, "%s", "[");
fprintf(outFile, "%s", str1);
fprintf(outFile, "%s", "] ");
printf("%s", line);
fprintf(outFile, "%s", line);
与
printf("[%d] %s", row, line);
fprintf(outFile, "[%d] %s", row, line);