7

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

4

3 回答 3

9

当使用 %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]);
}

当您引用数组中的特定元素时,您必须使用指针和索引,即在这种情况下指针 [0] 0 是索引,“指针”是指针。上面的 for 循环将在整个数组中一次移动一个索引,因为“i”是索引,并且“i”在循环的每次旋转结束时都会增加,并且循环将继续旋转,直到它到达终止 NULL 字符数组。

所以你可能想尝试一些类似的东西。

void printoutarray(char *pointertoarray)
{
  for(i = 0; i <= 2; i++)
  {
    printf("\n Element is: %s \n", pointertoarray[i]);
  }
}
于 2013-01-13T20:55:18.157 回答
7

做这个:

char *pointertoarray = &array[0];

编译没有警告你的编译器?如果是这样,你的编译器坏了。请阅读它打印出来的错误和警告。

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

于 2013-01-13T18:46:18.623 回答
2

去掉星号

printf("\n Element is: %s \n", pointertoarray);
于 2013-01-13T18:45:43.403 回答