Pointers in array of Structures in C



我打算用此代码实现的目标是从主函数中获取字符串字符,然后在特定索引处将其分配给结构上的名称。示例:它应该为我打印Name=> Charles Key=> 0下一行将是Name=> George Key=> 1 ...等等。但它选择输入的姓氏并将其用于所有内容,尽管我的结构是一个结构数组。我也不想直接将其直接放在主要的位置……就像scanf("%s", &node[i].name)一样,因为在我正在构建的真实项目中,我会根据用户输入的内容来计算我。请帮助我。谢谢

#include<stdio.h>
#include<stdlib.h>
typedef struct{
   int key;
   char *name;
}test;
int main(){
test node[5];
int i;
char see[10];
 //for loop for taking string character in see and then assigning name in structure to it 
for(i=0; i<5; i++){
 printf("Enter namet");
 scanf("%s", &see);
 //assigns name in structure index i to see
 node[i].name=see;
 node[i].key=i;
}
//prints data stored in structure
for(i=0; i<5; i++){
  printf("Name=> %sttKey=> %d",node[i].name, node[i].key);
}
return 0;
}

按照以下...

更改
  1. char *name; ----> char name[10];
  2. scanf("%s", &see); ----> scanf("%s", see);
  3. node[i].name=see; ----> strcpy(node[i].name, see);

您需要在结构内部挂起空间并复制文本而不是分配。当您分配指针时,您正在有效地使结构指针指向相同的内存,因此下次您读取该内存时,您覆盖了旧值。

尝试更换:

node[i].name = see;

with:

node[i].name = malloc(strlen(see) + 1);
if (node[i].name == NULL)
{
   // Handle Malloc error
}
strncpy(node[i].name, see, strlen(see) + 1);

最新更新