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

问题描述 投票:0回答:1

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

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

提前感谢

c arrays pointers memory malloc
1个回答
0
投票

误解很可能是,与对原始数据类型的指针进行反引用不同,“反引用”字符数组不会创建该数组的副本。数组不能使用赋值运算符=复制;有一个用于复制数组的单独函数(尤其是对于以0终止的char aka字符串,也用于分配复制所需的内存):

比较指向原始数据类型的指针,例如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 = strdup(ptr_x);  // allocate memory for the copy of the string, and copy the string.
printf("%s",copy_of_x);

输出:

some text
© www.soinside.com 2019 - 2024. All rights reserved.