gpt4 book ai didi

c - C 中的字符串数组,奇怪的行为

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

我正在尝试解决代码游戏的难题。
这是简单的代码:

#include <stdio.h>    
int main(void) {
char *hashTable[3];
for (int i = 0; i < 3; i++)
{
char EXT[101];
char MT[501];
scanf("%s%s", EXT, MT); fgetc(stdin);
hashTable[i]= MT;
}
printf("%s\n",hashTable[0]);
printf("%s\n",hashTable[1]);
printf("%s\n",hashTable[2]);
}

如果我输入:a a\n b b\n c c\n
输出将是:“c c c”而不是“a b c”。为什么最后一个值“c”会覆盖hashTable[0]和hashTable[1]。使用以下代码,我收到了正确的输出:

#include <stdio.h>    
int main(void) {
char *hashTable[3];
char *hashTable2[3];
hashTable2[0]="a";
hashTable2[1]="b";
hashTable2[2]="c";
for (int i = 0; i < 3; i++)
{
hashTable[i]= hashTable2[i];
}
printf("%s ",hashTable[0]);
printf("%s ",hashTable[1]);
printf("%s ",hashTable[2]);
}

最佳答案

首先,EXTMTfor 循环范围内是本地的,并且它们不存在于该范围之外。这是一个UB。

其次,将相同的数组地址分配给 char * 数组的所有元素。当您退出循环时,该地址不再有效。

您需要为所有元素分配内存:

for (int i = 0; i < 3; i++) 
{
hashTable[i]= malloc( /*some size*/);
if(hashTable[i])
scanf("%s", hashTable[i]); /* just an example */
}

关于c - C 中的字符串数组,奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52692289/

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