因此,我的程序中出现了一个非常奇怪的错误,并且将其缩小到与getline()
有关的事情,并声明了一个大于8的大小数组。但是,我对为什么它感到超级困惑这样做,因此非常感谢您的帮助或解释。
#include <stdio.h>
#include <stdlib.h>
void populateConfig();
int main(int arc, char *argv[])
{
// when thing is size 8 it works fine
char thing[9];
populateConfig();
return 0;
}
void populateConfig(){
FILE *fp;
char string1[1000], string2[1000];
char *line;
int len = 0;
fp = fopen("ws.conf", "r");
while(fscanf(fp, "%s", string1) != -1){
// Commenting out if statement prevents crash
if(string1[0] == '#'){
getline(&line, &len, fp);
continue;
}
}
fclose(fp);
}
因此,我只是读入一个配置文件,如图所示,当我将
thing
的大小更改为8或更小时,它可以工作,而当我在if
中注释掉populateConfig()
语句时,它也可以工作。这与堆栈或内存有关吗?我应该做些不同的事情吗? 最佳答案
您需要先将char *line
初始化为NULL。然后在返回之前,将其释放。
https://linux.die.net/man/3/getline
关于c - 字符数组声明崩溃程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46870028/