带结构字段指针的结构

问题描述:

#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通常指向整个向量。

+0

为什么你认为源是不正确的?你的编译器是否打印出错误? –

+1

[请参阅此讨论关于为什么不在'C'中投射'malloc()'和家族的返回值。](http://*.com/q/605845/2173917)。 –

+0

感叹。什么是不正确的?它是否编译?你期望什么输出。实际产出是多少?你的意见是什么? –

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]);