gpt4 book ai didi

C: 如何在seek后打印文件内容

转载 作者:行者123 更新时间:2023-12-04 06:01:07 25 4
gpt4 key购买 nike

嗨,我尝试在执行 fseek 后打印文件的剩余内容。现在我没有得到任何返回。我的代码有什么问题?

#include <stdio.h>

int main(int argc, char *argv[]){
FILE *fr;

if (fr = fopen (argv[1], "r")){
fseek(fr, 100, SEEK_CUR);

char c[1];
while (fread(c, 1, sizeof(c),fr) > 0)
printf("%s", c);

fclose(fr);
}
else{
perror("File does not exist");
}

}

最佳答案

正如其他答案所指出的那样,您正在向 printf 传递一个可能不会以 NULL 结尾的字符串。您也没有验证正在读取的文件是否大于 100 字节。最后一点,在 fread()你换了 size_t sizesize_t niters参数。

这是您的程序的修改版本,它修复了上述问题(并稍微清理了间距):

#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char *argv[])
{
FILE *fr;
char c[1];
struct stat sb;

// obtains information about the file
if (stat(argv[1], &sb) == -1)
{
perror("stat()");
return(1);
};

// verifies the file is over 100 bytes in size
if (sb.st_size < 101)
{
fprintf(stderr, "%s: file is less than 100 bytes\n", argv[1]);
return(1);
};

// opens the file, or prints the error and exists
if (!(fr = fopen (argv[1], "r")))
{
perror("fopen():");
return(1);
};

fseek(fr, 100, SEEK_CUR);

while (fread(c, sizeof(c), 1, fr) > 0)
printf("%c", c[0]);

fclose(fr);

return(0);
}

您还可以通过更改 char c[1]; 来提高读取文件的效率。到某事行 char c[1024];并将 while 语句更新为:
    while (fread(c, sizeof(char), 1023, fr) > 0)
{
c[1023] = '\0';
printf("%s", c);
};

关于C: 如何在seek后打印文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com