<分区>
我有这个结构:
(结构.h)
#pragma once
#ifndef STRUCT_H
#define STRUCT_H
typedef struct {
unsigned int id;
char *name;
char *address;
} Struct;
#endif
我制作了一个包含这些结构的动态数组。我还有一个循环,将一些数据放入这些结构中:
(主.c)
#include <stdio.h>
#include <stdlib.h>
#include "struct.h"
int main() {
int nStructs = 3;
Struct *structArray = calloc(nStructs, sizeof * structArray);
char input[30];
for (int i = 0; i < nStructs; i++) {
structArray[i].id = i;
sprintf(input, "name_%d", i);
structArray[i].name = input;
sprintf(input, "addr_%d", i);
structArray[i].address = input;
}
for (int i = 0; i < nStructs; i++) {
printf("\n[%04d] ID: %d\n", structArray[i].id, structArray[i].id);
printf("[%04d] NAME: %s\n", structArray[i].id, structArray[i].name);
printf("[%04d] ADDR: %s\n", structArray[i].id, structArray[i].address);
}
free(structArray);
return 0;
}
当我尝试运行此代码时,“int ID”以正确的方式打印,但“char *name”和“char *address”都包含循环中的最后一个值(在本例中为“addr_3 "):
(输出)
[0000] ID: 0
[0000] NAME: addr_2
[0000] ADDR: addr_2
[0001] ID: 1
[0001] NAME: addr_2
[0001] ADDR: addr_2
[0002] ID: 2
[0002] NAME: addr_2
[0002] ADDR: addr_2
我尝试在 visual studio 中使用调试器,当将它们放入数组(第一个 for 循环)时,这些值看起来没问题,但在某些时候它们会被覆盖。由于我是 visual studio 的新手,我不知道如何在特定点而不是值 [i] 处查看数组的值。
我在这里做错了什么?
编辑: 我从我的主要项目中复制/粘贴了这段代码,所以只有即时测试的部分会出现问题。但我发现我忘了添加“free(structArray);”在“返回 0;”之上。现在将其添加到问题中,以免其他人犯同样的错误。