gpt4 book ai didi

c - 在循环中调用 fscanf 后,Dev C++ 崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:55 25 4
gpt4 key购买 nike

有人能告诉我为什么下面的代码会导致 dev c++ 崩溃吗?

FILE* input;
int k=0;
char filename[]="";
int* Tab=NULL;
printf("Please specify the filename you want to open and read\n");

scanf("%s",&filename);

//strcat(filename,".txt");
input=fopen(filename,"r");
if(input==NULL)
{
printf("File open error");
}

fscanf(input,"%d",&total);
Tab=malloc(total);
for(k=0;k<total;k++)// here is my problem
{
fscanf(input,"%d",&Tab[k]);
}

文件正常打开,第一次尝试读取是正确的,然后突然开始崩溃。也可以读取变量 total 下一个 for 循环就是问题所在。

有什么帮助吗?

最佳答案

所以评论都表明了一件事:你认为编译器会为你处理内存。

不是这样的!在 C 中,所有内存处理都必须由您完成:

  • char filename[]=""; 中你声明了一个 1 字节的数组(只有 '\0')但是你认为 scanf("%s",&filename); 会神奇地增加它以能够容纳更长的文件名。不是这样! (为什么字符数组上的 & ?)

  • Tab=malloc(total); 中,您认为编译器知道您要存储在 Tab 中的元素的大小。不是这样的!

对于每条评论,您都做了一个小改动,然后“该死!它仍然不起作用!”当然不是,因为您不了解 C 编译器不会为您处理内存。我建议你再看一遍关于内存的书:阅读全局变量、静态变量和自动变量;阅读数组和字符串,阅读 mallocreallocfree

(这与其说是解决方案,不如说是评论)

关于c - 在循环中调用 fscanf 后,Dev C++ 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com