我有一个从文件中读取文本的缓冲区。我像这样循环它来计算线条:
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正在查看缓冲区的末尾。
我可以回到缓冲区的开头吗?
答案 0 :(得分:1)
使用rewind(fp);
或fseek(fp, 0, SEEK_SET);
fseek
被认为是更好的做法,因为它返回状态代码。
答案 1 :(得分:1)
首先,你不应该使用strtok,因为它不能交错,即使没有线程,也不能使用线程,你只是要求麻烦。听起来你正在某处增加缓冲区变量。只需保留原始缓冲区变量并修改副本,然后就应该是金色的。
答案 2 :(得分:0)
保持另一个指针只指向缓冲区的开头(也许是char * begin
?),然后在第一个while循环后重新初始化fp。这将有效地“寻求”回到起点。
答案 3 :(得分:0)
请注意,fgets()
一次会读取一行,因此返回的字符串中最多会有一行换行符。
请注意strtok()
修改它扫描的字符串,将NUL字符放入每个标记末尾的原始字符串中。
其中任何一个或两个都可能影响你的逻辑。