2012-07-17 80 views
0

我使用fgets()扫描文件如下终止循环:用于fgets()

char buf[50]; 
if (fgets(buf, 50, fp) == NULL) { 
    printf("Error in file parsing.\n"); 
    exit(1); 
} 
char *p; 
p = buf; 

p点来缓冲和我使用它通过扫描串进行迭代。 fgets()的大小为50,但确实在扫描字符串的末尾添加了空终止符。

我while循环看起来如下:

while (*p != '\0') 

这工作时,我的文本文件有:1 + 23。当文本文件包含1 + 23 - 5时,它会遇到无限循环。这是为什么发生?

我也试过检查\n这也失败了。最后,我使用了strlen,并按照strlen进行了for循环运行,但这并不准确。

什么我的while循环应该看起来像什么建议?

+4

显示更多的代码。你可能忘记增加'p',或在其他地方出错。检查'\ 0'是正确的方法。 strlen()非常“精确”,所以这也表明其他地方的错误。 – nos 2012-07-17 09:19:11

+1

你是怎么使用'strlen'的? – 2012-07-17 09:20:33

+1

除了忘记按照@nos的指示递增之外,您还可以将p增加一倍,跳过终止的'\ 0'。 – 2012-07-17 09:21:28

回答

1

为什么不迭代如下:

int i, buflen; 
buflen = strlen(buf); 
for(i=0; i<buflen; i++) { 
    // your code on buf[i] 
} 
+2

[某些编译器每次可能调用'strlen'](http://stackoverflow.com/q/2049480/274261)。最好在循环之外调用它。 – ArjunShankar 2012-07-17 09:27:47

+0

@ArjunShankar:好点。我要编辑我的帖子。 – 2012-07-17 09:29:40

+0

这就是我做到的。请参阅上面的评论。 – darksky 2012-07-17 13:38:41