C:查找后如何打印文件内容

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)

嗨,我正在尝试打印文件的剩余内容后,我做了一个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");
  }

}
#包括
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);
    };