填写c中的struct列表

时间:2018-03-14 07:20:12

标签: c

我有一个问题我在C中使用struct列表,当我在列表中添加一个Item时,我这样做:

nodo *nuevo=(nodo*) malloc (sizeof(nodo));
    char nombre[5]="vd";
    nombre[2]=letra;
    nombre[3]=indice;
    nombre[4]='\0';
    nuevo->siguiente = NULL;
    nuevo->path= path;
    nuevo->nombre= nombre;

这是有效的,但在另一种方法,当我试图获取nombre和路径的值似乎是如果它们是空的(“”) 但是当我通过这种方式设置值时:

nuevo->path= "anyString";
nuevo->nombre= "anyString";

在另一种方法中我可以完美地得到这些值,有什么建议吗? 结构性的节点是这样的:

typedef struct{
    char *path;
    char *nombre;
    particion *part;
    struct nodo *siguiente;
}nodo;

当我在列表中保存时,我这样做:

 primero=nuevo;

其中primero的类型为nodo *

当我尝试获取值时,我使用:

 if(strcmp(aux->nombre,id)==0){
            printf("Value is fine");
            break;
        }

我会赞美任何消极或评论,谢谢大家。 我在debian的Codeblocks中。

3 个答案:

答案 0 :(得分:1)

您尚未指定,但似乎char nombre[5]是本地的,因此在功能堆栈

因此,如果您将其分配给nuevo-> nombre并在另一个函数中使用它会导致未定义的行为,因为stackframe现在指向其他地方

更好的方法是使用nuevo->nombre将内存分配给malloc,然后使用strcpy

将字符串复制到其中

答案 1 :(得分:0)

malloc足够的空间来存储结构中每个指针的数据,并将字符串复制到分配的指针。

nuevo->path = malloc(strlen(path) + 1);
strcpy(nuevo->path, path);

(等等其他领域)

答案 2 :(得分:0)

在第一种方法中,您将chars指针(nuevo-&gt; path和nuevo-&gt; nombre)分配给char数组地址,因此如果char数组是本地的或它们的值更改,则会影响指针。< / p>

在第二种方法中,编译器将为您的指针分配内存并将值赋给它们,以便您可以在任何函数中检索该值。

要使第一种方法正常工作,您需要将代码更改为以下示例

    nuevo->path= (char *)malloc(strlen(path)+1);
    strcpy(nuevo->path,path);
    nuevo->nombre= (char *)malloc(strlen(nombre)+1);
    strcpy(nuevo->nombre,nombre);