首页 > 解决方案 > 结构属性在多个元素上具有相同的地址

问题描述

嗨,我有一个结构数组,它有一个 char * 属性。但是,当我尝试为每个元素分配多个值时,当我去读取我写入的最后一个值时,会在所有元素中显示。不知何故,所有 char* 属性都具有相同的内存地址。

#include <stdio.h>
#include <string.h>

struct Identity{
    char *name;
    int idNumber;
} identities[5];

int main(){

    int i;
    char tempName[20];

    for(i = 0; i < 2; i++){
        printf("IDENTITY %d\n", i+1);
        printf("Name: ");
        fgets(tempName, 20, stdin);
        strtok(tempName, "\n");
        identities[i].name = tempName;
        printf("Id: ");
        scanf("%d", &identities[i].idNumber);
        getchar();
    }

    for(int i = 0; i < 5; i++){
        printf("MEMORY %d: %ld\n", i+1, identities[i].name); // FILLED VALUES HAVE EQUAL MEMORY ADRESS???? WHY??
    }



    printf("***OUTPUT***\n");

    for(i = 0; i < 5; i++){
        printf("IDENTITY %d\n", i+1);
        printf("Name: %s\n", identities[i].name);
        printf("Id: %d", identities[i].idNumber);
        if(i != 4){
            printf("\n");
        }
    }



    return 0;
}

标签: c

解决方案


这条线是问题所在:

identities[i].name = tempName

在这里,您使所有结构name成员指向tempName.

我建议您将name成员设为数组,然后将字符串复制到其中。


推荐阅读