我如何在缓冲区中寻找? C

时间:2011-02-13 05:24:11

标签: c string parsing

我有一个从文件中读取文本的缓冲区。我像这样循环它来计算线条:

    while(fgets(buf, 1024, fp) != NULL){

        for(counter = strtok(buf,"\n"); counter; counter=strtok(0,"\n")){               
            threads++;
        }  
    }

    printf("NUMBER OF THREADS: %i", threads);

然后我再次循环它以解析每一行并启动一个线程,其中包含在该行中解析的参数。

但是当我运行它时,它会退出,因为下一行是:

while(fgets(buf, 1024, fp) != NULL){
 ....
}

我认为这是因为fgets正在查看缓冲区的末尾。

我可以回到缓冲区的开头吗?

4 个答案:

答案 0 :(得分:1)

使用rewind(fp);fseek(fp, 0, SEEK_SET);

fseek被认为是更好的做法,因为它返回状态代码。

答案 1 :(得分:1)

首先,你不应该使用strtok,因为它不能交错,即使没有线程,也不能使用线程,你只是要求麻烦。听起来你正在某处增加缓冲区变量。只需保留原始缓冲区变量并修改副本,然后就应该是金色的。

答案 2 :(得分:0)

保持另一个指针只指向缓冲区的开头(也许是char * begin?),然后在第一个while循环后重新初始化fp。这将有效地“寻求”回到起点。

答案 3 :(得分:0)

请注意,fgets()一次会读取一行,因此返回的字符串中最多会有一行换行符。

请注意strtok()修改它扫描的字符串,将NUL字符放入每个标记末尾的原始字符串中。

其中任何一个或两个都可能影响你的逻辑。