gpt4 book ai didi

字符 vector 节省超过其大小

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:20 25 4
gpt4 key购买 nike

我有一个读取文件并将其内容保存到结构中的程序:

struct cadastro {
char cod_segurado[3];
char nome_segurado[50];
char seguradora[50];
char tipo_seguro[30];
};

碰巧在读取并保存结构成员 cod_segurado[3] 中的第一个字段后,当程序到达第二个字段时,它被保存在第一个和第二个字符 nome_segurado[ 50] 结构的成员。为什么?

下面的代码展示了我的做法:

while (j < quant_registros){

fread(&registro,sizeof(char),TAM_REG_ENTRADA,arquivo);

while(conta_caracteres < TAM_COD_SEGURADO){
if(registro[i] != '\0'){
cadastro[j].cod_segurado[k] = registro[i];
k++;
}
i++;
conta_caracteres++;
}

k = 0;

conta_caracteres = 0;

while(conta_caracteres < TAM_NOME_SEGURADO){
if(registro[i] != '\0'){
cadastro[j].nome_segurado[k] = registro[i];
k++;
}
i++;
conta_caracteres++;
}
j++;
i = 0;
k = 0;
conta_caracteres = 0;

}

所以,最后(例如)结构应该是这样的:

cod_segurado = '001Joao' //why saving Joao if size is 3?
nome_segurado = 'Joao'
seguradora = 'Example'
tipo_segurado = 'Example'

最佳答案

一致地缩进代码。

这个代码块是错误的

            if(registro[i] != '\0'){
cadastro[j].cod_segurado[k] = registro[i];
k++;
}
i++;
conta_caracteres++;

如果第二个字符是 '\0',您的代码将从那里开始偏离轨道。 if 可能会像 if(k == 0 || cadastro[j].cod_segurado[k - 1] != '\0') 那样工作得更好,但这不是这个错误。一般来说,我们会将其重写为

            cadastro[j].cod_segurado[k] = (k == 0 || cadastro[j].cod_segurado[k - 1] != '\0')
? registro[i]
: 0;
i++;
conta_caracteres++;

这样结构中的其余 char 数组将变为零填充。

您使用 printf("%s", cadastro[j].cod_segurado); 打印了 cod_segurado 使用 printf("%.3s", cadastro[j].cod_segurado); 从而将字符串限制为最多 3 个字符。

我总是很高兴看到这种旧格式仍在使用。

关于字符 vector 节省超过其大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761351/

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