strstr C function is functioning abnormally
对于即将到来的C项目,目标是读取CSV文件,其中前两行列出行和列的长度,例如
1 2 3 4 5 6 | attributes: 23 lines: 1000 e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m e,x,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u |
问题是,我不知道将来的文件输入是否具有相同的行/列长度,因此我实现了
为此,我需要将子字符串与当前行匹配。如果匹配,则使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | int lineCount, attrCount; //global variables void determineFormats(FILE *incoming){ char *curLine= emalloc(CLINPUT); int i; char *ptr=NULL; for (i=0; i<2; i++){ if (fgets(curLine, CLINPUT, incoming) != NULL){ ptr= strstr(curLine,"attrib"); //this line is skipped over if (ptr!= NULL) fscanf(incoming,"attributes: %d", &attrCount); else fscanf(incoming,"lines: %d", &lineCount); } } printf("Attribute Count for the input file is: %d ", attrCount); printf("Line count is: %d ", lineCount); } |
我对if / else块的想法是,由于此功能只有两行,它们都位于文件的开头,因此只需扫描每一行并测试字符串是否匹配即可。如果是,则运行非空条件,否则执行另一个条件。但是,在这种情况下,
额外信息
一些评论使我返回并仔细检查。
CLINPUT被定义为100,或者大约是每行要读取的字符数的40%。
当调用
1 2 3 |
一旦发生这种情况,线路指示器消失,并且从该点开始的单步执行(F5)返回到调用函数。
strstr运作良好。 问题是fscanf将读取下一行,因为当前已读取。
这是更正确的方法
1 2 3 4 5 6 7 8 9 10 |