【发布时间】:2019-10-09 14:19:24
【问题描述】:
我正在编写一个程序来比较两个文件。如果出现匹配行,则程序将继续执行某些任务。我的第二个文件只有一行,第一个文件有几行
File_1 的内容
apple is red
oranges are orange
banana is yellow
cat is black
red is not green
File_2 的内容
cat is black
我已经使用fscanf 函数读取 File_2 的行并将其存储在变量中。
if ((fp=fopen(File_2, "r")) == NULL)
{
printf("Error opening File");
}
fscanf(fp,"%[^\n]", name);
fclose(fp);
我用下面的方法在File_1中搜索过相似之处
fp = fopen(File_1, "r");
while ((read = getline(&line, &len, fp)) != -1)
{
if (strcmp(line,name)==0)
{
printf("Hurray\n");
break;
}
else
{
printf("I am unlucky\n");
}
}
fclose(fp);
但我的问题是,
strcmp()没有返回0
我想知道这里出了什么问题。任何建议将不胜感激。
【问题讨论】:
-
欢迎来到 SO!您是否尝试打印出字符串以查看一个或任何额外字符上是否有尾随换行符?
-
在调试这样的问题时,打印字符串会有所帮助(如前所述)。请务必在字符串前后放置分隔符,以便您可以看到任何前导或尾随空格。例如:
printf("<%s>\n<%s>\n", line, name) -
你觉得man page of
getline的这一部分可能和它有关吗? : "缓冲区以 null 结尾并且包含换行符"。您正在阅读的名称显然不会,您正在使用设置格式来故意排除它。 -
printf("Error opening File");- 在这行之后你肯定需要返回或退出
标签: c string scanf getline strcmp