c语言 字符串比较的问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 04:53:42
有一个文本文档 1.txt 内容为
Baidu
Yahoo

我写以下代码:
#include <stdio.h>
#include <string.h>

void main(){
FILE *fp;
fp = fopen("1.txt","r");
int i;
char c[10],d[]={"Baidu"},e[]={"Yahoo"};
for(i=0;i<2;i++){
fgets(a,10,fp);
if(strcmp(c,d)==0) printf("Baidu\n");
if(strcmp(c,e)==0) printf("Yahoo\n");
}
fclose(fp);
}
本来可以得到 输出Baidu\n 和Yahoo\n 的 但是只输出了Yahoo 。
初步想法是 读文件的时候是讲 Baidu# (#代表'\n') 读入到c[]中,而
d[] 里面的内容是 Baidu* (*代表'\0'字符串结束标志) ,所以两个数组不相等,但文本中的Yahoo已经到文件结尾了 故没有'\0' 而得不到结果。 如果把 fgets(a,10,fp); 改成fgets(a,6,fp);的话 只能输出Baidu,但是需要比较的字符串的长度并不清楚
请各位大侠帮忙解决下 写出程序或给出思路就可以了

为了 避免偶然
1.txt内容也可以改成
bbbbbbbbu
bbbbbbbbbbu
bbbbbbbbbbbbbbbbbu

而比较字符串就是 bbbbbbbbbbu

原因是你读的是"Baidu\n"和"Yahoo",运算结果当然就是那样的喽!
你只需要把函数strcmp改成限制比较长度的函数strncmp就可以了。
strncmp(s1,s2,Len)
只比较前Len个字符,不就对了么?把Len取为strlen(s1),这个被比较的样板字符串s1长度应该是能够确定的吧?
而函数fgets是读取一行字符,完全可以把第二个参数——读取长度取得更大一些,因为是遇到回车换行和文件结束符就停止读取的嘛!
应该被选为标准答案吧?