C 此文件处理代码中存在运行时错误
这是一个简单的代码,用于将某人的姓名和号码存储在文件中。当我还想包含此人的联系号码时,会出现问题。扫描联系号码后会出现错误C 此文件处理代码中存在运行时错误,c,runtime-error,file-handling,C,Runtime Error,File Handling,这是一个简单的代码,用于将某人的姓名和号码存储在文件中。当我还想包含此人的联系号码时,会出现问题。扫描联系号码后会出现错误 #include <stdio.h> #include <stdlib.h> main() { FILE *fp;//file pointer char *name,*number; char filename[]="testfile.txt";//file to be created fp=fopen(filename,"w"); if(fp==N
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *fp;//file pointer
char *name,*number;
char filename[]="testfile.txt";//file to be created
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("\nerror\n");
exit(1);
}
fprintf(stdout,"Please enter a name:\t");
fscanf(stdin,"%s",name);
fprintf(fp,"%s",name);
fprintf(stdout,"Enter contact number:\t");
fscanf(stdin,"%s",number);
fprintf(fp,"%s",number);
fclose(fp);
}
#包括
#包括
main()
{
FILE*fp;//文件指针
字符*名称,*编号;
char filename[]=“testfile.txt”;//要创建的文件
fp=fopen(文件名,“w”);
如果(fp==NULL)
{
printf(“\n错误\n”);
出口(1);
}
fprintf(stdout,“请输入名称:\t”);
fscanf(标准输入,“%s”,名称);
fprintf(fp,“%s”,名称);
fprintf(标准输出,“输入联系人号码:\t”);
fscanf(标准输入,“%s”,编号);
fprintf(fp,“%s”,数字);
fclose(fp);
}
您没有在内存中添加名称和编号 为指针名称和编号
name = malloc(sizeof(char) * num_elements);
number = malloc(sizeof(char) * num_elements);
以下是您的代码摘录:
char *name;
fscanf(stdin,"%s",name);
name
是指向字符(或字符串的第一个字符)的指针,但您没有初始化它的值,因此它指向任何位置
带有fscanf
的第二行读取一个单词并将其写入内存中name
所指的地址。因此,基本上,fscanf
将尝试在它可能无法编写的地方编写
有两种解决方案:
- 您可以将
char*name
更改为char name[MAXNAME]
(其中MAXNAME
是一个常量值)
- 要么执行
malloc
:char*name=malloc(MAXNAME)
对于number
也一样,指针“name”指向某个(随机)空间!请考虑不要通过代码> SIEZOF(CHAR)推荐缩放,它总是1,所以它非常混乱(特别是对于那些不习惯C的人,我想)。我添加了sizeof(char)
来维护malloc
的语法。这就解决了问题。我还尝试了其他方法。我删除了fclose(fp)之前的3行。因此,文件将只存储名称,而这在没有malloc()名称内存的情况下工作。在这里运行代码时也应该出现运行时错误!没必要!这是“未定义的行为”,变量是如何初始化的