意外的 strtok() 行为
我正在尝试使用 strtok() 计算文件中的单词数。
/*
* code.c
*
* WHAT
* Use strtok() to count the number of words in a file.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRMAX 128
int main() {
/* Declarations */
FILE* fptr;
int iCntr = 0;
char sLine[STRMAX];
char* cPToken;
/* Read file */
/* Error handler */
if ((fptr = fopen("/home/ubuntu/Dropbox/Unief/C/H18/Opdr01/Debug/test.txt", "r")) == NULL) {
printf("Couldn't read test.txt.\n");
exit(0);
} else {
while (fgets(sLine, STRMAX-1, fptr) != NULL) { /* Read line */
while ((cPToken = strtok(sLine, ".,; !?\r\n")) != NULL) { /* Split into words */
iCntr++;
}
}
printf("Number of words: %d\n", iCntr);
}
/* Always clean up your mess */
fclose(fptr);
return 0;
}
这会导致无限循环。为什么?
I'm trying to count the number of words in a file with strtok().
/*
* code.c
*
* WHAT
* Use strtok() to count the number of words in a file.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRMAX 128
int main() {
/* Declarations */
FILE* fptr;
int iCntr = 0;
char sLine[STRMAX];
char* cPToken;
/* Read file */
/* Error handler */
if ((fptr = fopen("/home/ubuntu/Dropbox/Unief/C/H18/Opdr01/Debug/test.txt", "r")) == NULL) {
printf("Couldn't read test.txt.\n");
exit(0);
} else {
while (fgets(sLine, STRMAX-1, fptr) != NULL) { /* Read line */
while ((cPToken = strtok(sLine, ".,; !?\r\n")) != NULL) { /* Split into words */
iCntr++;
}
}
printf("Number of words: %d\n", iCntr);
}
/* Always clean up your mess */
fclose(fptr);
return 0;
}
This causes an infinite loop. Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要两次调用,第二次您需要将 NULL 传递给
strtok
。而不是:
执行
编辑:完整源代码:
使用您的输入文件,我得到的结果为 16。
编辑#2:修改您的源代码:
我得到相同的结果 - 16。
You need two calls, the second time you need to pass NULL to
strtok
.Instead of:
do
Edit: Full source:
With your input file, I get the result as 16.
Edit# 2: Modifying your source:
I get the same result -- 16.