我创建了一个函数,它接受指向C-String数组中第一个元素的指针。 这是阵列,以及我如何制作它:
char element1[60] = "ubunz";
char element2[60] = "uasdasffdnz";
char* array[10] = {element1,element2};
然后我创建了一个指向数组中第一个元素的指针:
char *pointertoarray = &array[0];
然后我将指针传递给我做的函数:
void printoutarray(char *pointertoarray){
int i = 0;
while (i < 2){
printf("\n Element is: %s \n", *pointertoarray);
pointertoarray = pointertoarray + 1;
i = i+1;
}
}
当我运行程序时,数组永远不会打印出来。
我之前在C ++中完成了这个程序,但我使用了STL字符串类型,并创建了一个指向字符串数组的指针。我认为我的问题在于我在C中创建一个字符串数组的方式,以及指向它的指针。
答案 0 :(得分:7)
当使用%s调用printf()时,它会或多或少地执行以下操作
for(i = 0; pointer[i] != '\0'; i++)
{
printf("%c", pointer[i]);
}
你想做什么就像是
for(i = 0; pointer[i] != '\0'; i++)
{
printf("\n Element is %c", pointer[i]);
}
当您引用数组中的特定元素时,必须使用指针AND索引,即在这种情况下指针[0] 0是索引,“指针”是指针。上面的for循环将一次在整个数组中移动一个索引,因为'i'是索引,并且'i'在每次循环旋转结束时增加,循环将继续旋转,直到它到达终止NULL字符数组。
所以你可能想尝试一下这方面的事情。
void printoutarray(char *pointertoarray)
{
for(i = 0; i <= 2; i++)
{
printf("\n Element is: %s \n", pointertoarray[i]);
}
}
答案 1 :(得分:6)
这是:
char *pointertoarray = &array[0];
编译时没有警告编译器?如果是这样,您的编译器就会崩溃。请阅读它打印出的错误和警告。
&array[0]
是char**
,而不是char*
答案 2 :(得分:1)
删除星号
printf("\n Element is: %s \n", pointertoarray);