【发布时间】:2020-06-02 22:46:24
【问题描述】:
我是 C 新手,但仍在尝试找出指针。
所以这是我陷入的一项任务:我想将 10 个水果名称分配给数组指针并一个一个打印出来。以下是我的代码;
#include <stdio.h>
#include <string.h>
int main(){
char *arr_of_ptrs[10];
char buffer[20];
int i;
for (i=0;i<10;i++){
printf("Please type in a fruit name:");
fgets(buffer,20,stdin);
arr_of_ptrs[i]= *buffer;
}
int j;
for (j=0;j<10;j++){
printf("%s",*(arr_of_ptrs+j));
}
}
但是执行此操作后,它只显示所有 10 个响应的最后一个结果。我试图咨询其他人提出的类似问题,但没有运气。
我的理解是 1) 数组的指针已经用 [10] 分配了内存,所以不需要 malloc()。
2) 缓冲区存储指向每个单独答案的指针,因此我取消引用它并将其分配给 arr_of_ptrs[i] 我不确定 arr_of_ptrs[i] 是否给我一个指针或一个值。我认为它绝对是一个指针,但我用 * 代码尊重它并将它分配给 *buffer,程序会卡住。
如果有人能指出我的问题,那就太好了。
提前致谢
【问题讨论】:
-
而
arr_of_ptrs[i]= *buffer;应该会发出一个巨大的警告。那就是将char分配给char*,无论发布的问题如何,这都是错误的。 -
试试:
arr_of_ptrs[i]= strdup(buffer);。也就是说,复制每个数组条目要引用的字符串。当不再需要时,不要忘记free每个数组指针。
标签: c arrays pointers memory malloc