我是一个C语言的初学者,我试图将一个字符串复制到另一个字符串中。我有以下代码:
#include <stdio.h>
#include <string.h>
typedef struct {
float mort_2009, mort_2015, indices;
char estado[];
} Mortalidade;
void defineEstados (
Mortalidade *e,
char estado[],
float mort_2009,
float mort_2015,
int posix)
{
strcpy(e[posix].estado, estado);
e[posix].mort_2009 = mort_2009;
e[posix].mort_2015 = mort_2015;
e[posix].indice = mort_2009 / mort_2015;
}
void imprimeEstados (Mortalidade *e){
for (int i = 0; i < 3; i++){
printf("Estado: %s, Morte em 2009: %.1f, Morte em 2015: %.1f, Indice: %.2f \n",
e[i].estado,
e[i].mort_2009,
e[i].mort_2015,
e[i].indice);
}
}
int main() {
Mortalidade estados[27];
defineEstados(estados, "AC", 12.6, 10.6, 0);
defineEstados(estados, "AL", 12.6, 10.6, 1);
defineEstados(estados, "AP", 12.6, 10.6, 2);
imprimeEstados(estados);
return 0;
}
我的结构Mortalidade
有一个名为estado
的字段,它将接收一个字符串(和其他数据)在void函数defineEstados
中。因此,在使用strcpy
复制结构体内部的字符串之后,在void函数imprimeEstados
中,当我想打印结构体内部的estados
时,结果看起来像变量内部的垃圾,我不知道如何找到错误。下面是获得的输出:
Estado: ��IA��)A�&�?��IA��)A�&�?AP, Morte em 2009: 12.6, Morte em 2015: 10.6, Indice: 1.19
Estado: ��IA��)A�&�?AP, Morte em 2009: 12.6, Morte em 2015: 10.6, Indice: 1.19
Estado: AP, Morte em 2009: 12.6, Morte em 2015: 10.6, Indice: 1.19
我不知道该怎么办,也不知道该怎么办。
注意:我假装插入更多的estados
,但我更喜欢修复以前的代码。
2条答案
按热度按时间h43kikqp1#
estado
是一个长度为零(0)的灵活数组成员。您不能像在程序中那样使用此结构,因为静态分配不会为其分配任何内存。此类结构旨在用于动态分配。
https://godbolt.org/z/13j31hGeG
bq9c1y662#
问题是您声明了一个具有灵活数组成员的结构,该成员名为
estado
它具有不完整的字符数组类型。
您需要为数据成员沿着结构类型的对象分配内存,或者指定数组的固定大小,或者将数据成员声明为
char *
类型的指针,并为存储的字符串分配内存。最简单的方法就是像这样声明数据成员
estado
存储字符串文字就足够了。