Arrays 无法使函数读取双数组

Arrays 无法使函数读取双数组,arrays,c,string,function,pointers,Arrays,C,String,Function,Pointers,所以我有一段代码,我想存储5个随机名字,每个名字不超过10个字母 void打印名(char*s); int main(){ 字符名[10][5]; int nameconter=0; 而(nameconter我发现了一个问题 char NAME[10][5]; 应该是 char NAME[5][11]; 这样,您就可以声明5个名称插槽,每个插槽最多10个字符。额外的空间用于字符串null终止符。您有 void printname(char *s) { printf("Hello

所以我有一段代码,我想存储5个随机名字,每个名字不超过10个字母

void打印名(char*s);
int main(){
字符名[10][5];
int nameconter=0;
而(nameconter我发现了一个问题

char NAME[10][5];
应该是

char NAME[5][11];
这样,您就可以声明5个名称插槽,每个插槽最多10个字符。额外的空间用于字符串null终止符。

您有

void printname(char *s) {
 printf("Hello %s\n",*s); 
 return;
}
你需要

void printname(char *s) {
 printf("Hello %s\n",s);  // Took off the * from the *s
 return;
}

因为s已经是您的指针。

我给出了6个需要修复的小故障。请参阅前面的注释

#包括
#包括
无效打印名(字符*s);
int main(){
字符名[5][11]={0};//#1值初始化为零
//#2第二个维度应该是11,因为10个字母加上空字符
int nameconter=0;

虽然(nameconter您的代码甚至没有打印任何内容给我,但它只是冻结并关闭。而且它也不太清楚

您在printname中键入了错误的“NAME”数组。此函数没有返回值,因为它有一个无效的返回值,所以您不应该键入任何返回值。此外,您可以保存一些代码行,在主函数之前写入它,这是最佳做法:

void printname(){
//todo
}

int main(){
return 0;
}
这是实现功能的更好方法:

void printname(char Names[5][11], int index){
    printf("Hello %s\n", Name[index]);
}
您可以将while结构替换为for结构,因为在这种情况下,它是用于此目的的最佳应用程序:

您的代码片段:

while(NAMECOUNTER<5) {
    scanf("%s",NAME[NAMECOUNTER]);
    printname(&NAME[NAMECOUNTER]);
    NAMECOUNTER++;
}
for(NameCounter = 0; NameCounter < 5; NameCounter++){
        scanf("%s",NAME[NAMECOUNTER]);
        printname(NAME[NAMECOUNTER]);
}
while(名称计数器)
void printname(char Names[][11], int index){
    printf("Hello %s\n", Names[index]);
}

int main(){
    
    char NAME[5][11];
    int NAMECOUNTER;;
    for(NAMECOUNTER = 0; NAMECOUNTER < 5; NAMECOUNTER++){
        
        scanf("%s", NAME[NAMECOUNTER]);
        printname(NAME, NAMECOUNTER);
    }
}