gpt4 book ai didi

c - 数组和点问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:01 25 4
gpt4 key购买 nike

这里,我有一个糟糕的程序。它的输出让我感到困惑,谁能告诉我为什么?

 #include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
char *a_result[10];
char *b_result[10];
for (i = 0; i < 10; i++)
{
char a_array[10];
char *b_array = malloc(10*sizeof(char));
int j = 0;
for (j = 0; j < 9; j++)
{
a_array[j] = 'a' + i;
b_array[j] = 'a' + i;
}
a_array[j] = '\0';
b_array[j] = '\0';
a_result[i] = a_array;
b_result[i] = b_array;

}
for (i = 0; i < 10; i++)
printf("a_result: %s b_result: %s\n",a_result[i],b_result[i]);
return 0;
}

我认为a_result 和b_result 应该相同,但不是。

这是我电脑上的输出。

a_result: jjjjjjjjj b_result: aaaaaaaaa
a_result: jjjjjjjjj b_result: bbbbbbbbb
a_result: jjjjjjjjj b_result: ccccccccc
a_result: jjjjjjjjj b_result: ddddddddd
a_result: jjjjjjjjj b_result: eeeeeeeee
a_result: jjjjjjjjj b_result: fffffffff
a_result: jjjjjjjjj b_result: ggggggggg
a_result: jjjjjjjjj b_result: hhhhhhhhh
a_result: jjjjjjjjj b_result: iiiiiiiii
a_result: jjjjjjjjj b_result: jjjjjjjjj

对此的任何解释表示赞赏!

最佳答案

for (i = 0; i < 10; i++)
{
char a_array[10];
...
a_result[i] = a_array;
}

您正在 for 循环范围内的堆栈上声明一个数组。这意味着一旦你离开 for 循环,数组就会失效。也就是说,a_result里面的东西是无效的。

对于栈上变量,编译器将在每个循环中为 a_array 重用相同的内存区域(这不适用于 b_array,因为将从通过 malloc 堆)。因此,对于您的情况,a_result 仅复制了 10 个相同的无效指针。


如果您想要该数组内容的副本,请将a_result 的类型设置为

char a_result[10][10];

和使用

memcpy(a_result[i], a_array, sizeof(a_result[i]));

复制到结果中。

关于c - 数组和点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2938131/

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