我打算用此代码实现的目标是从主函数中获取字符串字符,然后在特定索引处将其分配给结构上的名称。示例:它应该为我打印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;
}
按照以下...
更改-
char *name;
---->char name[10];
-
scanf("%s", &see);
---->scanf("%s", see);
-
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);