如何在c中正确使用strcasecmp

时间:2016-03-28 23:15:04

标签: c

我正在从第一行包含单词“hello”的文件中读取一行。然后我使用strcasecmp将它与“hello”进行比较,但它告诉我它仍然不同

char *line = NULL;
size_t len = 100;
printf("%s", argv[1]);
FILE * fp = fopen(argv[1], "r");
if (fp == NULL) {
    printf("empty\n");
    exit(0);
}
getline(&line, &len, fp);
if (strcasecmp(line, "hello") == 0) {
    printf("same");
}

2 个答案:

答案 0 :(得分:1)

如果字符串相同(除了大小写),strcasecmp将仅返回0,而不是第一个字符串以第二个字符串开始

getline会在行尾读取换行符,所以如果你键入" hello"你进入的字符串" line"将是"你好\ n"。

答案 1 :(得分:0)

这是getline()

的手册页
 getline()  
 reads an entire line from stream, storing the address of the
 buffer containing the text into *lineptr.  
 The  buffer  is  null-terminated 
 and includes the newline character, if one was found.

请注意有关包含换行符的部分。

因此,要么限制比较的长度,要么更好,修剪新的线条char,使用类似的东西:

char * newline = NULL;
if( NULL != (newline = strchr( line, '\n' ) )
{ // then newline found
    *newline = '\0';
}