首页 > 解决方案 > C. 我需要放入一个二维 char 数组,但在循环之外,结果是每一个最​​后的数据

问题描述

int main()
{
    int i = 0;
    char *string[2][5], trunkcode[50];

    while (i <= 1)
    {
        if(i == 0)
            strcpy(trunkcode,"test0");
        else if(i == 1)
            strcpy(trunkcode,"test1");
        
        string[i][0] = trunkcode;
        printf("trunkcode %s\n",string[i][0]);

        ++i;
    }
    printf("\n");
    printf("trunkcode %s\n",string[0][0]);
    printf("trunkcode %s\n",string[1][0]);
    
    return 0;
}

输出:

中继代码测试0 中继
代码测试1

中继代码测试1
中继代码测试1

为什么输出不是

中继代码测试0 中继
代码测试1

中继代码测试0 中继
代码测试1

标签: arrayscwhile-loop

解决方案


只有一个trunkcode数组。两者都string[0][0]包含string[1][0]指向同一个数组的指针。您将数组的内容替换为strcpy()代码,因此在循环结束时数组包含test1,并且两个指针都指向该内容。

你不需要trunkcode数组。只需制作string一个二维字符数组而不是指针。

int main()
{
    int i = 0;
    char string[2][50];

    while (i <= 1)
    {
        if(i == 0)
            strcpy(string[i],"test0");
        else if(i == 1)
            strcpy(string[i],"test1");
        
        printf("trunkcode %s\n",string[i]);

        ++i;
    }
    printf("\n");
    printf("trunkcode %s\n",string[0]);
    printf("trunkcode %s\n",string[1]);
    
    return 0;
}

推荐阅读