C - 如何将单个字符串分配给一个指针数组中的元素?



我是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,程序会卡住。

如果有人能指出我的问题,那就太好了。

提前致谢

三个 erros,1。您必须为 arr_of_ptrs 元素的元素分配内存,现在您只需为堆栈内存上的 arr_of_ptrs 元素分配内存。2.arr_of_ptrs[i]= *buffer;表示所有arr_of_ptrs元素都指向相同的内存地址,即"缓冲区"指针。因此,arr_of_ptrs的所有元素都将与最后一个 stdin 输入字符串相同。3. 后续的 fgets(( 调用有潜在的问题,其中一个解释可能在这里

快速解决方案可能是,

#include <stdio.h>
#include <string.h>
int main(){
const int ARR_SIZE = 10, BUFFER_SIZE = 20;
char arr_of_ptrs[ARR_SIZE][BUFFER_SIZE];
char *pos;
int i, c;
for (i = 0; i < ARR_SIZE; ++i) {
printf ("Please type in a fruit name: ");
if (fgets (arr_of_ptrs[i], BUFFER_SIZE, stdin) == NULL) return -1;
if ((pos = strchr(arr_of_ptrs[i], 'n')))
*pos = 0;
else
while ((c = getchar()) != 'n' && c != EOF) {}
}
for (i = 0; i < ARR_SIZE; ++i)
printf("%sn", arr_of_ptrs[i]);
return 0;
}

误解可能是"取消引用"字符数组与取消引用指向基元数据类型的指针不同,不会创建该数组的副本。数组不能使用赋值运算符=复制;有一个单独的函数用于复制数组(特别是对于 char aka c 字符串的 0 终止数组,以及用于分配复制所需的内存(:

将指针与基元数据类型进行比较,例如int

int x = 10;
int *ptr_x = &x;
int copy_of_x = *ptr_x;  // dereferences a pointer to x, yielding the integer value 10

然而:

char x[20] =  "some text";  // array of characters, not a single character!
char *ptr_x = &x[0];  // pointer to the first element of x
char copy_of_first_char_of_x = *ptr_x;  // copies the 's', not the entire string

用:

char x[20] = "some text";
char *ptr_x = &x[0];
char *copy_of_x = malloc(strlen(ptr_x)+1);  // allocate memory large enough to store the copy    
strcpy(copy_of_x,ptr_x);  // copy the string.
printf("%s",copy_of_x);

输出:

some text

相关内容

  • 没有找到相关文章

最新更新