为什么fgets会返回错误的字符串?

时间:2011-07-01 15:23:09

标签: c string printf fgets

我不知道怎么说,但我知道我做错了。

char *temp2= "/shares/mJim";
char ourList[1024];

fgets(ourList, 1024, modified)

sprintf(sysString, "grep -c %s %s", ourList, temp2);

现在fgets完成它的工作,但当我尝试用sprintf形成这个字符串时,我得到grep -c Lanuncher.ini,其余的都丢失了。现在这里是踢球者,如果我颠倒这样的顺序:

sprintf(sysString, "grep -c %s %s", temp2, ourList);

结果将是我想要的,但无效搜索grep:grep -c /shares/mJim Lanucher.ini

如果我这样做:

sprintf(sysString, "grep -c %s %s", temp2, temp2);

它创建了预期的字符串(grep -c /shares/mJim /shares/mJim)。有谁知道发生了什么?

输入一个简单的文本文件就是一个列列表:

Launcher.ini
bits.exe
etc....

这种情况下的垃圾是我提到的异常短的字符串。当我打印出myList所拥有的内容时,它会返回Launcher.ini。

3 个答案:

答案 0 :(得分:5)

fgets包含一个尾随'\n'。您可能希望在构建sysString之前将其删除...

fgets(ourList, sizeof ourList, modified);
size_t ourListlen = strlen(ourList);
if (ourListlen && (ourList[ourListlen - 1] == '\n')) {
    ourList[--ourListlen] = 0; /* remove trailing '\n' and update ourListlen */
}

答案 1 :(得分:1)

我不确定。我们的列表足够大吗?你也应该真的,真的检查fgets()的返回值。

答案 2 :(得分:1)

如果您从modified FILE流中读取的行包含换行符,则返回的字符串中为newline will be included。你有机会:

"Launcher.ini\n"

剥去换行符,你应该好好去。