我正在尝试编写一段代码,提示用户输入数字 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/