FILE *fp; 12 char s[128]; 13 char s1[128]={1,2,3}; 14 if (argc<2) 15 { 16 printf("canshu is error \n"); 17 return -1; 18 19 } 20 if((fp= fopen(argv[1],"a"))==NULL) 21 { 22 perror("fopen"); 23 return -1; 24 } 25 if(fwrite(s1,sizeof(char),128,fp)<0L) 26 { 27 perror("fwrite"); 28 return -1; 29 } 30 if(fseek(fp,0,SEEK_SET)<0) 31 { 32 perror("fseek"); 33 return -1; 34 } 35 36 if(fread(s,sizeof(char),128,fp)<0) 37 { 38 perror("fread"); 39 return -1; 40 } 41 puts(s); 42 printf("-----------------\n"); 43 puts(s1); 44 return 0; 45 } ~ 为啥还是打印不出来
时间: 2024-01-14 09:04:06 浏览: 20
这段代码中,打印不出来的原因可能是因为文件指针在写入数据后没有正确地定位到文件开头,或者读取的数据长度不够。可以在代码中加入以下语句来进行检查:
1. 检查文件指针是否在写入后正确地定位到文件开头:
```
long cur_pos = ftell(fp);
if (cur_pos != 0) {
perror("ftell");
return -1;
}
```
这样可以获取当前文件指针的位置,如果不是0,则说明文件指针没有正确地定位到文件开头。
2. 检查读取的数据是否够128个字节:
```
size_t read_bytes = fread(s, sizeof(char), 128, fp);
if (read_bytes < 128) {
perror("fread");
return -1;
}
```
这样可以获取实际读取的字节数,如果不够128个字节,则说明读取失败。
在加入上述代码后,可以检查一下输出的错误信息,以确定具体的问题所在。
相关问题
usage(FILE *fp, int argc, char **argv)
`usage(FILE *fp, int argc, char **argv)` 是一个函数的声明,它接受三个参数:一个指向文件的指针 `fp`,一个整型参数 `argc`,以及一个指向字符指针数组的指针 `argv`。这个函数通常用于在命令行程序中打印程序的使用说明。
函数的作用是将程序的使用说明打印到指定的文件中。通常情况下,`fp` 参数会传入 `stdout`,即标准输出,以便将使用说明打印到控制台上。`argc` 参数表示命令行参数的数量,`argv` 参数是一个指向字符串数组的指针,其中每个字符串都是一个命令行参数。
函数的具体实现会根据具体的需求而有所不同,但通常会使用标准库中的输出函数(如 `fprintf` 或 `printf`)来将使用说明打印到指定的文件中。
void usage(FILE *fp, int argc, char **argv)
void usage(FILE *fp, int argc, char **argv)是一个函数的声明,用于在程序中显示用法信息。它接受三个参数:一个指向FILE类型的指针fp,一个整型参数argc,以及一个指向字符指针的指针argv。
该函数通常在程序运行时,当用户输入了错误的命令行参数或者需要查看程序的使用方法时被调用。它的作用是向用户展示程序的正确使用方式和可接受的命令行参数。
函数体内部的具体实现可以根据具体需求来编写,但通常会使用fprintf函数将使用方法输出到指定的文件流fp中。argc和argv参数可以用来获取用户输入的命令行参数,以便在使用方法中进行展示或者根据不同的参数执行不同的逻辑。