gpt4 book ai didi

c - 可变大小的对象可能无法初始化 - C 错误

转载 作者:行者123 更新时间:2023-11-30 17:04:17 25 4
gpt4 key购买 nike

我正在尝试运行代码,但无法构建。我想读取 3 个不同的名称,每个名称最多 40 个字符,保存在一个 vector 中并打印。我需要使用函数来完成它。我在第 15 行收到“可变大小的对象可能未初始化”。我相信如果未定义 vector 的大小,我可能会收到此错误。我已经尝试使用常量(NOMESQUAN 和 NOMESTAM)和声明(nomes[3][41])来定义它,但每次都会遇到相同的错误。

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

#define NOMESQUAN 3
#define NOMESTAM 41

int lenomes(int i);

int main()
{
int i;
char nomes[NOMESQUAN][NOMESTAM];

for(i=0; i<3; i++){
char nomes[i][NOMESTAM] = lenomes(i); /*LINE 15*/
}

}

int lenomes(int i){
char nome[NOMESTAM];

printf("Digite o nome %d", i);
gets(nome);

return nome;
}

最佳答案

首先,函数lenomes包含无意义的代码,无法编译。您不能从函数返回数组。并且您也没有声明该函数返回数组,您已声明它返回一个int。你告诉我这有什么意义。

<小时/>

char nomes[NOMESQUAN][NOMESTAM];

这里声明了一个数组,但随后在循环内再次声明另一个数组 char nomes[i][NOMESTAM],但这次是一个可变长度数组(因为 i 是一个运行时变量)。此类数组无法初始化,因为它们只有在运行时获取值才有意义。

<小时/>

总而言之,编程时你不能只是碰碰语言语法,你实际上必须知道你写的每一行的作用。

您可能想做这样的事情:

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

#define NOMESQUAN 3
#define NOMESTAM 41

void lenomes (int i, char nomes[i][NOMESTAM]);

int main()
{
int i;
char nomes[NOMESQUAN][NOMESTAM];

for(i=0; i<NOMESQUAN; i++){
lenomes(i, nomes);
}

}

void lenomes (int i, char nomes[i][NOMESTAM]) {
printf("Digite o nome %d", i);
gets(nome[i]);
}

关于c - 可变大小的对象可能无法初始化 - C 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35869027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com