我无法从函数中的main访问数组。我该如何改正?每当我编译它时,说参数1的类型为** char,而参数1传递给fre不兼容。我需要更改任何语法吗?
void fre(char *asd);
int main()
{
char *names[7]={"Jayan Tennakoon","John Long","Robert Lang"};
int i;
for(i=0;i<7;i++)
{
printf("%s\n",names[i]);
}
fre(names);
return 0;
}
void fre(char *asd)
{
int i;
for(i=0;i<7;i++)
{
printf("%s\n",asd[i]);
}
}
答案 0 :(得分:1)
您已经声明了一个包含7个指针的数组。你用其中的3个初始化它。您需要传递指针数组,而不是指向字符数组的指针。根据这些评论,我将添加一些方法来声明数组,这些方法可能会明确不同的方式实际意味着什么。
#include <stdio.h>
#include <stdlib.h>
void fre(char *asd[]);
int main(void) {
char * name [ ] = {"Jayan Tennakoon","John Long","Robert Lang"};
char * names [7] = {"Jayan Tennakoon","John Long","Robert Lang"};
char names2[7] = {'H', 'e', 'l','l','o','\0'};
char **names3 = names;
printf("names2 = %s\n",names2);
printf("names3[0] = %s\n",names3[0]);
int i;
for(i = 0; i < 3; i++) {
printf("%s\n",names[i]);
}
fre(names);
return 0;
}
void fre(char *asd[]) {
int i;
for(i = 0; i < 3; i++) {
printf("%s\n",asd[i]);
}
}
我还必须将循环从7
减少到3
,否则您将遇到未定义的行为,如果幸运的话,这将是一个分段错误,如果不幸的话,它可能会打印垃圾,但会退出返回0的雕像。
答案 1 :(得分:0)
用
char *names[7]={"Jayan Tennakoon","John Long","Robert Lang"};
你有一组指向char
的指针。所以
void fre(char *asd)
应该是
void fre( char *asd[], int n)
/* it is good to pass the total(here 3)
* since you have initialized the first three elements
*/
{
.
.
for(i=0;i<n;i++)
.
.