将Char数组传递给C中的函数

时间:2016-05-04 16:58:04

标签: c arrays function pointers char

我无法从函数中的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]);

       }
 }

2 个答案:

答案 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++)
.
.