首页 > 解决方案 > 为什么 for 循环用最新的字符串填充整个数组?

问题描述

抱歉,如果这很简单,但我是 C 新手。我正在尝试创建一个循环,用多个字符串填充一个空的字符串数组。但是,最后,整个数组都被最新的元素填充了!下面是代码:

int main(void)
{
    string array_test[2];
    char string_test[300];

    for (int i = 0; i < 2; i++)
    {
        snprintf(string_test, sizeof(string_test),"Test: %i", i);
        array_test[i] = string_test;
    }

    for (int i = 0; i < 2; i++)
    {
        printf("%s\n", array_test[i]);
    }
}

这将返回:

Test: 1
Test: 1

但我期待:

Test: 0
Test: 1

标签: arrayscpointerscs50implicit-conversion

解决方案


因为您在所有迭代中使用相同的缓冲区来保存字符串。这将使以前的字符串被新字符串覆盖。

为每个字符串分配单独的缓冲区以避免这种情况。

/* put #include of required headers here */

int main(void)
{
    string array_test[2];
    char string_test[2][300];

    for (int i = 0; i < 2; i++)
    {
        snprintf(string_test[i], sizeof(string_test[i]),"Test: %i", i);
        array_test[i] = string_test[i];
    }

    for (int i = 0; i < 2; i++)
    {
        printf("%s\n", array_test[i]);
    }
}

推荐阅读