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

时间:2013-01-13 18:43:06

标签: c arrays cstring

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

3 个答案:

答案 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);