我是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,程序将被卡住。
[如果有人可以指出我的问题,那就太好了。
提前感谢
误解很可能是,与对原始数据类型的指针进行反引用不同,“反引用”字符数组不会创建该数组的副本。数组不能使用赋值运算符=
复制;有一个用于复制数组的单独函数(尤其是对于以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