帮助解决 c 错误
Help with c errors
收到此错误:
1>c:usersb1021568documentsvisual
工作室 2010\项目\塔雷法42\塔雷法
42\main.cpp(112): 错误 C2664: "cria_aluno":无法转换 参数 2 从"常量字符 [7]"到 "字符" 1> 没有上下文可以进行这种转换
尝试编译此内容时:
int main(void)
{
Aluno *a[5];
a[0] = cria_aluno(1, "turma1", "Joao", 7.0, 8.4, 4.3);
a[1] = cria_aluno(2, "turma2", "Maria", 3.2, 5.1, 10.0);
a[2] = cria_aluno(3, "turma3", "Rafael", 8.1, 3.2, 4.5);
a[3] = cria_aluno(4, "turma4", "Jose", 1.3, 7.7, 9.3);
a[4] = cria_aluno(5, "turma5", "Lais", 4.5, 1.3, 9.9);
ordena(5, a);
return 0;
}
这是我cria_aluno功能:
Aluno *cria_aluno(int mat, char turma, char nome, float p1, float p2, float p3)
{
Aluno *a;
a = (Aluno*) malloc(sizeof(Aluno));
if(a == NULL)
{
printf("Memoria insuficiente");
return NULL;
}
a->mat = mat;
a->turma = turma;
strcpy(a->nome, nome);
a->p1 = p1;
a->p2 = p2;
a->p3 = p3;
return a;
}
将其更改为
Aluno *cria_aluno(int mat, const char* turma, const char* nome, float p1, float p2, float p3)
"turma1"等属于const char*
型,而不是char
更改
Aluno *cria_aluno(int mat, char turma, char nome, float p1, float p2, float p3)
自
Aluno *cria_aluno(int mat, const char* turma, const char* nome, float p1,
float p2, float p3)
{
Aluno *a = (Aluno*) malloc(sizeof(Aluno));
if(a == NULL)
{
printf("Memoria insuficiente");
return NULL;
}
a->mat = mat;
a->turma = malloc(strlen(turma)+1);
strcpy(a->turma, turma);
a->nome = malloc(strlen(nome)+1);
strcpy(a->nome, nome);
a->p1 = p1;
a->p2 = p2;
a->p3 = p3;
return a;
}
您的函数期望参数 2 和 3 字符类型,而不是字符指针(char*,通常用作"字符串")。
在 main 函数中,您使用 char* 类型(字符串)作为参数 2 和 3 调用了 cria_aluno,这就是导致错误的原因。
首先,您需要决定要在 Aluno 结构中存储什么。让我们以图尔马为例:
如果要存储单个字符,则应使用 char 作为结构和函数中的 turma 类型。此外,在函数调用中,应使用单个字符作为参数 2,例如:"a"。要复制此字符,您应该使用一个简单的副本:a->turma = turma;
如果你想存储一个字符串,你应该使用 char[x](其中 x 是末尾的最大字符串长度 + \0)作为结构中的 turma 类型。在函数中,你应该使用 char* (const char* 会更好)。在函数调用中,可以使用字符串(例如:"example")。要复制此属性,您应该使用 strcpy。
将 turma 作为字符串模式存储在结构中的另一种方法是将结构中的类型更改为 char*。然后,在需要时分配内存。
祝你好运
阿米尔
在函数调用中
a[0] = cria_aluno(1, "turma1", "Joao", 7.0, 8.4, 4.3);
"turma1"
和 "Joao"
是字符串文本,它们是char
数组(C++ 中const char
)。 这两个表达式的类型分别是 char [7]
和 char [5]
。 这些类型与char
不兼容,这是您声明turma
和nome
在cria_aluno
中的内容,因此会出现错误。
在大多数情况下,数组表达式的类型从"T
的 N 元素数组"隐式转换为"指向T
的指针"。 所以实际传递给cria_aluno
的是两个类型的表达式 char *
,而不是 char
。 因此,您需要将cria_aluno
声明更改为
Aluno *cria_aluno(int mat, const char *turma, const char *nome, float p1, float p2, float p3)
为什么const char *
而不是char *
? 这有助于防止您意外修改指针指向的内容;尝试修改字符串文本的内容会导致未定义的行为。
- Project Euler问题4的错误解决方案
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 你能解释一下什么运行时错误是如何解决它的吗?
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- Arduino 用于语句错误。令牌之前的预期')' ';'。如何解决这个问题?
- 如何在 macOS 卡塔琳娜上解决此错误?
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- Visual Studio 2017 中的 QtMetaObject 未解决的外部错误
- 我想在 c++ 中对单向链表进行冒泡排序,但我一直面临左值错误,无法解决它
- C++抽象类参数错误解决方法
- 运行VS2008解决方案时运行时错误;解决方案正在构建良好
- g++链接错误-解决方法有效的原因
- 故障错误解决
- 这是HackerRank的错误解决方案