c - 结构属性在多个元素上具有相同的地址
问题描述
嗨,我有一个结构数组,它有一个 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;
}
解决方案
这条线是问题所在:
identities[i].name = tempName
在这里,您使所有结构name
成员指向tempName
.
我建议您将name
成员设为数组,然后将字符串复制到其中。
推荐阅读
- php - 插入多个项目,每个项目的总数
- python - 如果在 Docker 图像扫描中发现漏洞,是否有任何 python lambda 函数可以停止管道执行?
- c++ - 打印大量数字时 cout 失败
- swift - 在 SwiftUI 中处理 UITextView 的 UIResponder
- python - 求圆的面积
- python - 如何将模块传递给在 UDF 中使用的 spark 提交
- angular - 如何按特定 ID 排列/分组
- sonarqube - 如何允许从 AWS CodePipeline - CodeBuild 访问本地 URL?
- javascript - jQuery 删除和添加类问题
- android - 浏览器中的视频播放器和 Lineage OS 中的文件资源管理器之间的区别