字符阵列声明崩溃程序

时间:2017-10-22 02:48:51

标签: c arrays char

所以,我在程序中遇到了一个非常奇怪的错误,并且我已经将它缩小到与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或更低时,它可以正常工作,当我注释掉ifpopulateConfig()中的陈述也有效。这与堆栈或内存有关吗?我应该采取不同的做法吗?

1 个答案:

答案 0 :(得分:0)

您需要先将char *line初始化为NULL。然后在返回之前,释放它。

https://linux.die.net/man/3/getline