C - 无法使用stat()来获取字节数

时间:2012-06-05 00:46:45

标签: c stat

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错误一样。请帮忙!

2 个答案:

答案 0 :(得分:2)

fgets()返回尾随的换行符,因此'filename'永远不会正确。

替换:

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字符附加到字符串中。

答案 1 :(得分:0)

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

确定
  

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

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

reference