当前位置: 技术问答>linux和unix
简单的文件I/O问题
来源: 互联网 发布时间:2015-01-12
本文导语: #include #define MAX_BUF 1024 int main(void) { char *inputstr; char *outputstr; FILE *fp; printf("input string:"); scanf("%s",inputstr); fp=fopen("file.test","a+b"); fputs(inputstr,fp); outputstr=fgets(outputstr,MAX_BUF,fp); fclose(fp); exit(0)...
#include
#define MAX_BUF 1024
int main(void)
{
char *inputstr;
char *outputstr;
FILE *fp;
printf("input string:");
scanf("%s",inputstr);
fp=fopen("file.test","a+b");
fputs(inputstr,fp);
outputstr=fgets(outputstr,MAX_BUF,fp);
fclose(fp);
exit(0);
}
编译成功,但是执行出错。出错信息为:Segmentation fault
如果加上:printf("%s",outputstr);
就显示:(null)Aborted
还有个问题:怎么用gcc step by step debug程序?
#define MAX_BUF 1024
int main(void)
{
char *inputstr;
char *outputstr;
FILE *fp;
printf("input string:");
scanf("%s",inputstr);
fp=fopen("file.test","a+b");
fputs(inputstr,fp);
outputstr=fgets(outputstr,MAX_BUF,fp);
fclose(fp);
exit(0);
}
编译成功,但是执行出错。出错信息为:Segmentation fault
如果加上:printf("%s",outputstr);
就显示:(null)Aborted
还有个问题:怎么用gcc step by step debug程序?
|
你声明了字符指针,但是没有用molloc()为它们分配空间,所以不能用于scanf()fputs()等函数,
要想调试程序用编译时要加上-g选项:
gcc hello.c -o hello -g
然后用gdb调试,具体使用方法还是用man gdb来看吧,比较复杂.
要想调试程序用编译时要加上-g选项:
gcc hello.c -o hello -g
然后用gdb调试,具体使用方法还是用man gdb来看吧,比较复杂.
|
我在redhat7.3上编译通过,运行也没有问题,我输入的是:aaaaaaaa
#include
#include
#include
#define MAX_BUF 1024
int main(void)
{
char *inputstr;
char *outputstr;
FILE *fp;
printf("input string:");
scanf("%s",inputstr);
printf("aaaaaan");
fp=fopen("file.test","a+b");
printf("bbbbn");
fputs(inputstr,fp);
outputstr=fgets(outputstr,MAX_BUF,fp);
fclose(fp);
exit(0);
}
#include
#include
#include
#define MAX_BUF 1024
int main(void)
{
char *inputstr;
char *outputstr;
FILE *fp;
printf("input string:");
scanf("%s",inputstr);
printf("aaaaaan");
fp=fopen("file.test","a+b");
printf("bbbbn");
fputs(inputstr,fp);
outputstr=fgets(outputstr,MAX_BUF,fp);
fclose(fp);
exit(0);
}
|
请把:
char *inputstr;
char *outputstr;
改为:
char inputstr[1024] ;
char outputstr[1024] ;
再试试看。
char *inputstr;
char *outputstr;
改为:
char inputstr[1024] ;
char outputstr[1024] ;
再试试看。
|
其他问题不说,只说为什么输出结果为空。
在调用 fgets(outputstr,BUFSIZ,fp);前
写: fseek(fp,0,SEEK_SET);试一下,
在调用 fgets(outputstr,BUFSIZ,fp);前
写: fseek(fp,0,SEEK_SET);试一下,