为什么当我在struct中使用strcpy时,将所有内容复制到同一个变量-c语言

时间:2014-06-23 23:39:05

标签: c struct strcmp

看看伙计们,我有上面的代码

#include <stdio.h>
#include <string.h>
#define MAX 5
typedef struct Estudante{
    char nome[MAX];
    char apelido[MAX];
    char residencia[MAX];
    int telefone;
}TEstudante;
int equalEnty(TEstudante *estudante_1,TEstudante *estudante_2);
int comesFirst(TEstudante *estudante_1,TEstudante *estudante_2);
int main(){

    TEstudante estudantes[2];
    strcpy((estudantes[0]).nome,"Angelo");
    strcpy(estudantes[0].apelido,"Pelon");
    strcpy(estudantes[0].residencia,"3B");
    estudantes[0].telefone = 33813001;

    strcpy(estudantes[1].nome,"Angelo");
    strcpy(estudantes[1].apelido,"Pelon");
    strcpy(estudantes[1].residencia,"3C");
    estudantes[1].telefone = 33813001;

    printf("%d",comesFirst(&(estudantes[0]),&estudantes[1]));

    return 0;
}

int equalEnty(TEstudante *estudante_1,TEstudante *estudante_2){

    if(strcmp((*estudante_1).nome,(*estudante_2).nome)!=0)
        return 0;
    if(strcmp((*estudante_1).apelido,(*estudante_2).apelido)!=0)
        return 0;
    if(strcmp((*estudante_1).residencia,(*estudante_2).residencia)!=0)
        return 0;
    if((*estudante_1).telefone != (*estudante_2).telefone)
        return 0;
    return 1;
}

int comesFirst(TEstudante *estudante_1,TEstudante *estudante_2){
    printf("%s %s",(*estudante_1).nome,(*estudante_2).nome);
    return strcmp((*estudante_1).nome,(*estudante_2).nome);
}

然后当我打印出来的内容时,getFirst函数会显示出类似的内容:

AngeloPelon3B AngeloPelon3C-1

为什么我将strins添加到结构区域??

1 个答案:

答案 0 :(得分:0)

数组中需要7个字符才能将"Angelo"复制到其中,而不是5个。字符串的长度为6,您需要一个额外的字符来终止空字符。

执行时,您正在写其他字段的内存:

strcpy((estudantes[0]).nome,"Angelo");

定义MAX比您要复制到nomeapelidoresidencia的字符串的最大长度多1倍。