将char数组传递给函数,以将数组复制到不同的数组并输出:";函数的隐式减容;,我做错了什么?

将char数组传递给函数,以将数组复制到不同的数组并输出:";函数的隐式减容;,我做错了什么?,c,C,我得到的编译错误是: practice.c:8: error: expected ‘;’, ‘,’ or ‘)’ before ‘a’ practice.c:13: error: expected ‘;’, ‘,’ or ‘)’ before ‘a’ practice.c: In function ‘main’: practice.c:43: warning: implicit declaration of function ‘convert’ 我试图将一个字符串数组从用户输入传递到一个函数,

我得到的编译错误是:

practice.c:8: error: expected ‘;’, ‘,’ or ‘)’ before ‘a’
practice.c:13: error: expected ‘;’, ‘,’ or ‘)’ before ‘a’
practice.c: In function ‘main’:
practice.c:43: warning: implicit declaration of function ‘convert’
我试图将一个字符串数组从用户输入传递到一个函数,该函数将该数组复制到另一个未初始化的数组中,并输出该数组,但我不明白我做错了什么。将数组传递给函数时,“char**”与“char*”相对代表什么

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

char convert(char* (*)a[][20], char* (*)b[][20]);
void get_input( char c[]);

char convert(char* (*)a[][20], char* (*)b[][20])
{
    strcpy(b[][20], a[][20]); 
    return b[][20]; 
} 

int main()
{
    char array[10][20]; 
    char array2[10][20]; 
    int i; 

    for(i=0; i<9; i++)
    { 
        printf(" Please input a string value \n"); 
        fgets( array[i], 20, stdin); 
    }

    convert(&array, &array2);   
    printf(" Final array \n"); 

    get_input(array2[10]);  
    return 0; 
}

void get_input( char c[])
{
    int i;  
    for (i=0; i<9; i++)
    { 
        printf("%c \n", c[i]); 
    }
}
#包括
#包括
#包括
字符转换(字符*(*)a[][20],字符*(*)b[][20]);
void get_输入(字符c[]);
字符转换(字符*(*)a[][20],字符*(*)b[][20])
{
strcpy(b[][20],a[][20]);
返回b[][20];
} 
int main()
{
字符数组[10][20];
字符阵列2[10][20];
int i;

对于(i=0;i您的参数错误:

char * (*) a[][20] ;
不是
C
中的有效声明,如果您的意思是:

char ** a[][20] ;
这是一个指向20个指向char的指针数组的指针…这显然不是您想要的

您只需要
a[][20]
(*a)[20]

void convert (char a[][20], char b[][20]);
那么你的代码也错了,不知道你在哪里看到的…你需要将数组循环到strcpy:

void convert (char a[][20], char b[][20]) {
    int i ;
    for (i=0; i<10; ++i) { // Here i put 10 but you should pass it as a parameter
        strcpy(b[i], a[i]); // Simply
    }
}
但是如果像您这样静态地分配
b
,这将不起作用,您需要动态地分配
b

char (*b)[20] ;
b = malloc(10 * sizeof(*b)) ;
b = convert(a, b);

以下是一个工作版本:

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

void convert(char a[][20], char b[][20]);
void get_output(char c[][20]);

void convert(char a[][20], char b[][20])
{
    int i;
    for (i = 0; i < 10; i++)
       strcpy(b[i], a[i]); 
    return;
}

int main()
{
    char array[10][20]; 
    char array2[10][20]; 
    int i; 

    for(i=0; i<10; i++)
    {
        printf(" Please input a string value \n"); 
        fgets(array[i], 20, stdin); 
    }

    convert(array, array2);   
    printf(" Final array \n"); 

    get_output(array2);  
    return 0;
}

void get_output( char c[][20])
{
    int i;
    for (i=0; i<10; i++)
    {
        printf("%s \n", c[i]); 
    }
}
#包括
#包括
#包括
无效转换(字符a[][20],字符b[][20]);
void get_输出(char c[][20]);
无效转换(字符a[][20],字符b[][20])
{
int i;
对于(i=0;i<10;i++)
strcpy(b[i],a[i]);
返回;
}
int main()
{
字符数组[10][20];
字符阵列2[10][20];
int i;

对于(i=0;iI请注意,您有一个convert函数的声明行(includes之后的第一行)。这是不必要的,因为convert函数在第一次使用之前就已定位。如果必须更改,将相同的信息放在两个位置会导致错误并增加工作量。
char*(*)a[][20]是一个语法错误,不等于char**a[][20];
是的,你比我快,所以我重写了我的答案,在你的答案上做了一个补充
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void convert(char a[][20], char b[][20]);
void get_output(char c[][20]);

void convert(char a[][20], char b[][20])
{
    int i;
    for (i = 0; i < 10; i++)
       strcpy(b[i], a[i]); 
    return;
}

int main()
{
    char array[10][20]; 
    char array2[10][20]; 
    int i; 

    for(i=0; i<10; i++)
    {
        printf(" Please input a string value \n"); 
        fgets(array[i], 20, stdin); 
    }

    convert(array, array2);   
    printf(" Final array \n"); 

    get_output(array2);  
    return 0;
}

void get_output( char c[][20])
{
    int i;
    for (i=0; i<10; i++)
    {
        printf("%s \n", c[i]); 
    }
}