我正在尝试将初始化的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.
}
}
答案 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)
您发送的states
是array 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]);
}
}