我尝试在执行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");
}
}
4条答案
按热度按时间daupos2t1#
正如其他答案所指出的,您传递了一个不能以NULL结尾的字符串printf,也没有验证要读取的文件是否大于100字节,最后一点,在
fread()
中,您交换了size_t size
和size_t niters
参数。下面是程序的修改版本,它修复了上述问题(并稍微清理了一下间距):
您还可以通过将
char c[1];
更改为something行char c[1024];
并将while语句更新为以下内容来提高阅读文件的效率:ttcibm8c2#
你不能用
%s
打印,因为你的字符串需要以空终止,而你只有一个字符。用途:不是所有的字符都是可打印的,检查一个ascii table以查看哪些是可打印的,哪些不是。例如打印一个0将不会在屏幕上打印任何东西,AFAIK
u59ebvdq3#
您正在阅读一个字节,但试图使用
%s
打印它,它需要一个以null结尾的字符串,将其更改为%c
(当然,将c
更改为*c
,以便与格式字符串一致!)应该可以解决问题。特别是当读取的字节值等于
0
时,带有%s
说明符的printf
将完全不输出任何内容(因为它认为您在重复要求它打印空字符串)。xbp102n04#
printf("%s",blabla)
应打印以null结尾的字符串。要打印一个字符,请使用printf("%c",c[0])
。