在c中打印出一串字符串的元素

tur*_*rnt 4 c arrays cstring

我创建了一个函数,它接受一个指向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中创建一个字符串数组的方式,以及指向它的指针.

Joh*_*inz 7

当用%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)


gus*_*f r 6

做这个:

char *pointertoarray = &array[0];
Run Code Online (Sandbox Code Playgroud)

编译时没有警告编译?如果是这样,您的编译器就会崩溃.请阅读它打印出来的错误和警告.

&array[0]是一个char**,而不是一个char*