我正在阅读文件和文件中的文字。需要搜索一些特定的单词,下面是我的代码
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;
}
}
示例文件'word'如下,
$: more word
liol
apple
scizzors
big
bang
mentalist
scapegrace
goat
goti
为什么strcmp在这种情况下不起作用,printf可以打印字符串读取,所以char指针工作正常。
答案 0 :(得分:5)
fgets()
函数在大多数情况下会在行尾保留换行符。因此,yourtext\n
不会与yourtext
相等。你会用我最喜欢的一种检查字符串的技巧来注意这一点:
printf ("[%s]\n", read);
在结束]
之前存在换行符会立即提醒您出现问题,或者至少引起一阵眉毛。
如果您想在比较前删除换行符,可以执行以下操作:
int ln = strlen (read);
if ((ln > 0) && (read[ln-1] == '\n'))
read[ln-1] = '\0';
或者,您可以跳过它,然后执行:
if (strcmp (read,"apple\n") == 0)
它不一定优雅但是,如果你不需要将这个词用于除了那个比较以外的任何东西,那就没关系了。
但是,您可能需要担心文件中的最后一行,以防它的末尾没有换行符,所以最好使用上面的换行代码。
答案 1 :(得分:2)
要搜索行中的特定字符串,而不是匹配整行,可以使用strncmp
(搜索n个字符)。
if (strncmp(read,"apple",strlen("apple")) == 0)
{
printf("apple found\n");
break;
}