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错误一样。请帮忙!
答案 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”的比较值。