C:查找后如何打印文件内容
嗨,我正在尝试打印文件的剩余内容后,我做了一个fseek。现在我没有得到任何回报。我的代码怎么了C:查找后如何打印文件内容,c,C,嗨,我正在尝试打印文件的剩余内容后,我做了一个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)
#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");
}
}
#包括
int main(int argc,char*argv[]){
文件*fr;
如果(fr=fopen(argv[1],“r”){
fseek(fr,100,SEEK_CUR);
charc[1];
而(fread(c,1,sizeof(c),fr)>0)
printf(“%s”,c);
fclose(fr);
}
否则{
perror(“文件不存在”);
}
}
您正在读取一个字节,但试图使用%s
打印它,这需要一个以null结尾的字符串。将其更改为%c
(当然也将c
更改为*c
,使其与格式字符串一致!)应该可以解决问题
特别是如果您读取的字节值等于
0
,则使用%s
说明符的printf
将完全不输出任何内容(因为它认为您反复要求它打印空字符串).您不能使用%s
打印,因为您的字符串需要以null结尾,并且您只有一个字符。
使用:
并非所有字符都可打印,请检查以查看哪些可打印,哪些不可打印。例如,打印0不会在屏幕上打印任何内容,AFAIK
printf(“%s”,blabla)
应打印以空结尾的字符串。对于打印一个字符,请使用printf(“%c”,c[0])
正如其他答案所指出的,您正在向printf传递一个字符串,该字符串不能以NULL结尾。您也没有验证正在读取的文件是否大于100字节。最后一点,在fread()
中,您交换了size\t size
和size\t niters
参数
以下是您的程序的修改版本,它修复了上述问题(并稍微清理了间距):
extract.c:30:警告:格式'%c'要求类型为'int',但参数2的类型为'char*'获取该错误,并且仍然打印nothing@SuperString:因此,您需要将
c
更改为*c
,以便与格式说明符一致。还可以尝试用%d
打印*c
——这些可能是空字节吗?注意,一次读取超过1个字节,然后使用printf假定输入文件是没有空字符的文本文件。
printf("%c",*c);
#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);
}
while (fread(c, sizeof(char), 1023, fr) > 0)
{
c[1023] = '\0';
printf("%s", c);
};