strcmp不适用于fgets文件读取输入字符串

时间:2014-03-09 09:57:27

标签: c

我正在阅读文件和文件中的文字。需要搜索一些特定的单词,下面是我的代码

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指针工作正常。

2 个答案:

答案 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;
 }