我不知道怎么说,但我知道我做错了。
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。
答案 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)