0
char string[50], s[50];
struct stat buf;
int counter = 0;

while (fgets(string, sizeof string, stdin)) {
    if (strspn(string, "size ") == 5) {
        for (int i = 5; i < strlen(string); i++) {
            s[counter] = string[i];
            counter++;
        }
        s[counter] = '\0';

        if (stat(s, &buf) < 0)
            return 1; //PROBLEM OCCURED

        printf("FILE: %s\n", s);
        printf("SIZE: %d\n", (int)buf.st_size);
    }
 }

程序的上下文不是很重要,但我尝试使用它,因为在“size”之后,文件名是唯一的输入。然后我将它传递给 stat 如果它存在,它应该给我给定文件的字节。最终,程序每次都返回 1,就像我使用 stat 错误一样。请帮忙!

4

2 回答 2

2

fgets() 返回尾随的换行符,因此您的“文件名”永远不会正确。

代替:

for(int i = 5; i < strlen(string); i++) {
   s[counter] = string[i];
   counter++;
}
s[counter] = '\0';

和:

char *source = &(string[5]), *dest = s;
while((*source != 0) && (*source != 10) && (*source != 13)) {
   *dest++ = *source++;
}
*dest = 0;

这样,您将复制所有内容,直到零(字符串结尾)、回车或换行 - 而不是将 CR 和/或 LF 字符也附加到字符串中。

于 2012-06-05T00:55:55.360 回答
0

我猜潜在的问题存在于 strspn() 的使用中。strspn() 的返回值可以从

如果 str1 中的所有字符都在 str2 中,则函数返回整个 str1 字符串的长度,如果 str1 中的第一个字符不在 str2 中,则函数返回零。

您可以检查源字符串是否包含“大小”的比较值。

参考

于 2012-06-05T01:09:44.380 回答