用C编码,为什么我的数组值会改变?

时间:2013-11-17 20:03:16

标签: c arrays pointers

我正在使用GDB来浏览我的代码,每次输入while循环时,NameList []中的值都会发生变化。就像我将NameList [0]设置为chr2,但是当我回到gdb中的while循环时,我说 x / s NameList [0] 现在它被设置为chr2的新值! 这怎么可能发生? 我知道我正在更改指针,但是数组不应该存储指针的旧值而不允许更新?

while (fgets(thisline, length, input) != NULL) {
    chr = strtok(Line, "    ");
    if(chr != NULL) {
        chr2 = strtok(chr, " ")
        int j = 0;
        while(NameList[j] != NULL) {
            j++;
        }
        NameList[j] = chr2;
    }
}

1 个答案:

答案 0 :(得分:1)

尝试更改

    NameList[j] = chr2;

    NameList[j] = strdup(chr2);

看看会发生什么。问题是你只是存储指针 char数组,并且char数组正在从你下面改变。这个结论 函数复制整个数组。