将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]);
}
}