我创建了一个函数,它接受一个指向C-String数组中第一个元素的指针.这是阵列,以及我如何制作它:
char element1[60] = "ubunz";
char element2[60] = "uasdasffdnz";
char* array[10] = {element1,element2};
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个指向数组中第一个元素的指针:
char *pointertoarray = &array[0];
Run Code Online (Sandbox Code Playgroud)
然后我将指针传递给我做的函数:
void printoutarray(char *pointertoarray){
int i = 0;
while (i < 2){
printf("\n Element is: %s \n", *pointertoarray);
pointertoarray = pointertoarray + 1;
i = i+1;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,数组永远不会打印出来.
我之前在C++中完成了这个程序,但我使用了STL字符串类型,并创建了一个指向字符串数组的指针.我认为我的问题在于我在C中创建一个字符串数组的方式,以及指向它的指针.
当用%s调用printf()时,它会或多或少地执行以下操作
for(i = 0; pointer[i] != '\0'; i++)
{
printf("%c", pointer[i]);
}
Run Code Online (Sandbox Code Playgroud)
你想做的就像是
for(i = 0; pointer[i] != '\0'; i++)
{
printf("\n Element is %c", pointer[i]);
}
Run Code Online (Sandbox Code Playgroud)
当您引用数组中的特定元素时,必须使用指针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]);
}
}
Run Code Online (Sandbox Code Playgroud)
做这个:
char *pointertoarray = &array[0];
Run Code Online (Sandbox Code Playgroud)
编译时没有警告编译?如果是这样,您的编译器就会崩溃.请阅读它打印出来的错误和警告.
&array[0]是一个char**,而不是一个char*