Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 此文件处理代码中存在运行时错误_C_Runtime Error_File Handling - Fatal编程技术网

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()名称内存的情况下工作。在这里运行代码时也应该出现运行时错误!没必要!这是“未定义的行为”,变量是如何初始化的