将char指针数组传递给函数

时间:2015-12-21 19:22:20

标签: c arrays function pointers char

我正在尝试将初始化的char指针数组传递给函数。我似乎无法弄清楚为什么函数只会打印出数组中每个元素的数字。

有谁知道如何从传入的指针数组中打印每个字符串元素?

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

void sort(char *);

int main()
{
   char *states[4] = {"Florida", "Oregon", "California", "Georgia"};

   sort(*states);

   return 0;
}

void sort(char *states)
{
   int x;

   for (x = 0; x < 4; x++) {
      printf("\nState: %d\n", states[x]); //only this will compile
      //printf("\nState: %s\n", states[x]); //need to print this.
   }

}

5 个答案:

答案 0 :(得分:6)

如果要打印数组内容,则sort函数必须接受指针数组。

void sort (char *states[], size_t num_states) {
    int x;

    for (x = 0; x < num_states; ++x) {
        printf("\nState: %s\n", states[x]); /* Note %s instead of %d */
    }
}

并且,您必须将数组传递给函数。

sort(states, 4);

答案 1 :(得分:3)

你需要将一个指向char的指针数组解析为sort(而不只是指向char的指针)。

正如jhx指出的那样,你也需要传递数组的大小。您可以使用sizeof以免硬编码4。初始化时也省略了数组大小。

void sort( char *states[], int arr_size )
{
    int x;

    for (x = 0; x < arr_size; x++) 
    {
        printf( "\nState: %s\n", states[x] );
    }
}

int main()
{
    char *states[] = {"Florida", "Oregon", "California", "Georgia"};     // array of pointers to char

    sort( states, sizeof( states ) / sizeof( char * ) );

    return 0;
}

答案 2 :(得分:1)

您需要将char指针数组传递给函数:

   #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include <stdlib.h>

    void sort(char *args[], int n);

    int main()
    {
       char *states[4] = {"Florida", "Oregon", "California", "Georgia"};

       sort(states, 4);

       return 0;
    }

    void sort(char *states[], const int N)
    {
       int x;

       for (x = 0; x < N; x++) {
          printf("\nState: %s\n", states[x]); 
       }

    }

答案 3 :(得分:1)

只有数字值才会传递的原因是,只传递了指向数组states[0]的字符串states的第一个元素的指针,即您正在传递&states[0][0]。所以,声明

printf("\nState: %d\n", states[x]);  

只会打印字符串4的第一个"Florida"字符的数值。

您需要将指针传递给数组states的第一个元素,即&states[0] 这可以通过将函数sort的声明符更改为

来完成
void sort(char **, size_t size); // You need to pass the size of array too. 

并将其命名为

sort(states, sizeof(states)/sizeof(char *));

答案 4 :(得分:0)

您发送的statesarray of pointers。因此,您需要将该数组的基址发送到函数

sort(*states);

然后仅在指针数组

中接收它
void sort(char* states[])
{
   int x;

   for (x = 0; x < 4; x++) {
      printf("\nState: %s\n", states[x]);
   }

}

硬编码大小也不是一个好主意,所以最好在函数调用中添加另一个参数size

sort(states, sizeof(states)/sizeof(char*));

以后用它来迭代数组

void sort(char* states[], int size)
{
   int x;

   for (x = 0; x < size; x++) {
      printf("\nState: %s\n", states[x]);
   }

}