我正在从文件中读取文字并需要搜索一些特定的单词,下面是我的代码
string read = malloc(50 * sizeof(char));
FILE* p = fopen("word","r");
while(fgets(read,50,p))
{
printf("%s\n",read);
if(strcmp(read,"apple") == 0)
{
printf("apple found\n");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
样本文件'word'如下,
$: more word
liol
apple
scizzors
big
bang
mentalist
scapegrace
goat
goti
Run Code Online (Sandbox Code Playgroud)
为什么strcmp在这种情况下不工作,printf可以打印字符串读取,所以char指针工作正常.
fgets()在大多数情况下,该功能会在行尾保留换行符.因此yourtext\n不会比较等于yourtext.你会用我最喜欢的一个检查字符串的技巧来注意这一点:
printf ("[%s]\n", read);
Run Code Online (Sandbox Code Playgroud)
在关闭之前存在换行符]会立即提醒您出现问题,或者至少引起一阵眉毛.
如果您想在比较之前删除换行符,您可以执行以下操作:
int ln = strlen (read);
if ((ln > 0) && (read[ln-1] == '\n'))
read[ln-1] = '\0';
Run Code Online (Sandbox Code Playgroud)
或者,你可以跳过它,只是做:
if (strcmp (read,"apple\n") == 0)
Run Code Online (Sandbox Code Playgroud)
它不一定优雅但是,如果你不需要将这个词用于除了那个比较之外的任何东西,那就没关系了.
但是,您可能需要担心文件中的最后一行,以防它在结尾处没有换行符,所以最好使用上面的换行符代码.