gpt4 book ai didi

Char 矩阵总是打印最后一个元素

转载 作者:行者123 更新时间:2023-11-30 14:32:51 26 4
gpt4 key购买 nike

我想编写一个简单的 C 程序,它将从控制台读取一系列字符串到 char[] 数组中,我对这门语言不太熟悉,但我想到的是以下内容:

#include <stdio.h> 

int main()
{
const int N = 2;
char *matrix[N][N];
char str[50];

printf("Provide the strings: \n"); // one, two, three, four
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
scanf("%s",str);
matrix[i][j] = str;
}
}

printf("----> %s", matrix[0][0]); // will print "four"

return 0;
}

我提供了以下字符串:一、二、三、四

现在,我想访问数组中的元素,但是在矩阵 matrix[i][j] 上运行循环时,我发现所有元素都引用最后引入的元素:四个

有人能解释一下为什么会这样吗?作为后续问题,读取和打印 char 数组元素的更惯用的方法是什么?

最佳答案

matrix[i][j] = str;

这不是字符串副本。它只是将每个matrix 条目指向同一个str 缓冲区。该 str 缓冲区在循环的每次迭代中都会被覆盖。因此,结果是所有 matrix 元素都指向与最后一个 scanf 内容相同的缓冲区。

解决此问题的一个选项是复制该字符串。

matrix[i][j] = strdup(str);

不要忘记进行错误检查,以确保 strdup 中的动态分配成功,并在不再需要时释放缓冲区。

关于Char 矩阵总是打印最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59654195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com