c - 数组仅用最后一个用户输入的输入字符串填充自身

标签 c arrays string user-input

我正在尝试编写一段代码,提示用户输入数字 n,动态分配一个 n 个字符串的数组,然后提示用户输入 n 个字符串。

我遇到的问题是数组只显示自己被用户输入的最后一个字符串填充。

例子: 程序提示用户输入 n 用户输入 3。 用户为数组中的第一个元素输入“test1” 用户为数组中的第二个元素输入“test2” 用户为数组中的第三个元素输入“test3”

我去打印数组的内容,它说每个元素都是“test3”

代码如下: (flush_buffer() 和 strip_newline() 是我写的函数,对我遇到的问题并不重要)

printf("How many strings?\n");
scanf("%d", &max_strings);
flush_buffer();

string_array = (char**) malloc(max_strings * sizeof(char*));

for(i = 0; i < max_strings; i++)
{
    scanf("%s", temp);

    strip_newline(temp);

    string_array[i] = temp;

    printf("string_array[%d] is: %s\n", i, string_array[i]);
}
    for(i = 0; i < max_strings; i++)
{
    printf("i: %d\n", i);
    printf("string_array[%d] is: %s\n", i, string_array[i]);
}

关于我在这里遗漏的任何想法?

最佳答案

随着作业

string_array[i] = temp;

你让 string_array 中的所有指针 指向同一个地方


我建议您使用 strdup 来复制字符串:

string_array[i] = strdup(temp);

当然,这意味着您必须释放集合中的所有字符串。

关于c - 数组仅用最后一个用户输入的输入字符串填充自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280402/

相关文章:

java - 在 Java 中不使用 replace 替换字符串中的单词

java - 字符串将空值拆分到数组中以使用 if 语句

c - dll 的 dumpbin 输出中的 "virtual address"

c - c 中从地面射出的轨迹炮弹

php - Redis(键/值数据库)和关联数组之间的区别?

java - JOptionPane 解析数组

python - 连接字符串然后打印

python - python 中 c_char ctypes 的输入类型无效

c - 使用 Bison 实现语法。语法控制流意外

c++ - 我不希望我的 Excel 加载项返回一个数组(相反,我需要一个 UDF 来更改其他单元格)