伙计们,我有上面的密码

#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);
}

然后,当我打印内容插入comesFirst函数时,它将显示如下内容:
安杰洛佩隆3b安杰洛佩隆3c-1
为什么我要在结构区域单独添加条纹!?

最佳答案

一个数组中需要7个字符才能将"Angelo"复制到它,而不是5个字符。字符串的长度是6,您需要一个额外的字符作为终止空字符。
执行以下操作时,您正在写入其他字段的内存:

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

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

关于c - 为什么当我在struct中使用strcpy时将所有内容复制到同一变量-C语言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24376247/

10-11 03:54