带结构字段指针的结构
问题描述:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 20
typedef struct arr {
char name[SIZE];
} arr;
typedef struct tz{
struct arr *next;
} tz;
int main() {
tz *tze;
const char *value[SIZE];
tze = (tz*) malloc(sizeof(tz)*5);
int i;
for(i = 0; i < 5; i++) {
printf("insert value:\n");
scanf("%s", value);
strcpy(tze[i].next->name, value);
}
for(i = 0; i < 5; i++){
printf("output:%s ",tze[i].next->name);
}
return 0;
}
嗨,上面有一个代码示例是我的问题。我想通过数组在每个单元格的链接列表中输入字段“名称”中的信息。不幸的是,来源不正确。一些想法?带结构字段指针的结构
int main() {
tz *tze;
char *value;
tze = (tz*) malloc(sizeof(tz)*5);
value = (char*) malloc(sizeof(char)*SIZE);
int i;
for(i = 0; i < 5; i++) {
printf("insert value:\n");
fgets(value, SIZE, stdin);
strncpy(tze[i].next->name, value,SIZE);
}
for(i = 0; i < 5; i++){
printf("output:%s ",tze[i].next->name);
}
return 0;
}
我改变了我的代码,但它仍然不起作用。我仍然得到一个信号错误的错误。如果我使用:
strcpy(tze[i].next->name, value[i]);
我得到一个错误的指针,我相信有值[I] IM指向只有价值firts细胞。在没有[i] im的情况下带有价值的Insteal通常指向整个向量。
答
const char *value[SIZE];
您已声明指向char
的指针数组。但是你没有将内存分配给数组中的每个指针。
您在其中输入输入,因此您需要为阵列中的每个指针分配内存。
现在看到这个循环 -
for(i=0;i<5;i++){
printf("insert value:\n");
scanf("%s",value); /* <--problem */
strcpy(tze[i].next->name,value); /* same here */
}
传递value
到%s
会导致未定义行为%s
需要一个char *
和你通过指针数组。同样的问题在strcpy
。
因此,正确的说法是 -
scanf("%s",value[i]); // better use fgets
strcpy(tze[i].next->name,value[i]);
为什么你认为源是不正确的?你的编译器是否打印出错误? –
[请参阅此讨论关于为什么不在'C'中投射'malloc()'和家族的返回值。](http://*.com/q/605845/2173917)。 –
感叹。什么是不正确的?它是否编译?你期望什么输出。实际产出是多少?你的意见是什么? –