gpt4 book ai didi

c - 我想了解指针和指针数组如何工作。我在这个程序中不明白什么?

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

int main(){
int i, department_quantity;
char *passer[8];
char *department_id = malloc(8);

printf("Enter number of departments:");
scanf("%d", &department_quantity);

for(i = 0; i < department_quantity; i++){
printf("Enter ID of department #%d\n", i + 1);
scanf("%s", department_id);
passer[i] = department_id;
}

string_array(&passer[0], department_quantity);

}

void string_array(char *array[], size_t length) {
int i ;
for (i = 0; i < length; i++) {
printf("\n%s\n", array[i]);
}
}

示例输出:

   Enter number of departments:2

Enter id of department #1

hello

Enter id of department #2

world

world

world

我试图理解为什么我无法让程序输出不同的用户输入,即 hello world 而不是“world world”。我对这里的指针有什么不理解的地方?

最佳答案

department_id只是同一个内存块。对于每个输入(每次迭代),您都在同一内存地址写入,从而有效地覆盖以前的内容。因此,最后,您所拥有的只是您输入的最终单词。请注意passer将包含等效元素(指针相同)。

要解决此问题,您需要为每个字符串单独分配内存。像这样的事情:

for(i = 0; i < department_quantity; i++) {
// ...
department_id = malloc(8); // here
scanf("%s", department_id);
passer[i] = department_id; // now passer[i] is a different pointer each time
}

或者你可以放弃department_id然后去 char passer[8][8]它不分配动态内存,然后简单地 scanf("%s", passer[i]);

附注使用scanf这种方式非常危险,因为没有什么可以阻止您输入太大而无法容纳您分配的内存的字符串。通常的方法是 fgets(passer[i], 8, stdin)哪里passerchar passer[8][8] - 注意8给出缓冲区的大小。

关于c - 我想了解指针和指针数组如何工作。我在这个程序中不明白什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133234/

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