无法将数据添加到结构中

时间:2017-03-16 18:29:24

标签: c

我正在尝试用C语言处理结构。这是我的代码:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

typedef struct _list
{
    char *string;
    struct _list *next;
}LIST_T;

LIST_T* structHead;
LIST_T* structTail;
LIST_T* typedefHead;
LIST_T* typedefTail;
LIST_T* structList;
LIST_T* typedefList;

void typedefAndStructHandle(int choice,char* data);
void mystrdup(char* newString,char* originalString);

void typedefAndStructHandle(int choice,char* data)
    {
    if(choice==1)
    {
        structList=(LIST_T*) calloc(1,sizeof(LIST_T));
        if(structList==NULL)
        {
            printf("Error the program will terminate\n");
        }
        else
        {
            mystrdup(structList->string,data);
            printf("structList->string: %s\n",structList->string);
            if(structHead==NULL)
            {
                structHead=structList;
            }
            else
            {
                structTail->next=structList;
            }
            structTail=structList;
        }
    }
    else if(choice==2)
    {
        typedefList=(LIST_T*) calloc(1,sizeof(LIST_T));
        mystrdup(typedefList->string,data);

        if(typedefHead==NULL)
        {
            typedefHead=typedefList;
        }
        else
        {
            typedefTail->next=typedefList;
        }
        typedefTail=typedefList;
    }
    else
    {
        printf("Something wrong with choice, try again\n");
    }
}

void mystrdup(char* newString,char* originalString)
{

    newString=malloc(strlen(originalString)+1);
    if(newString==NULL)
    {
        printf("newString, error allocation Terminate program\n");
        exit(0);
    }
    else
    {
        strcpy(newString,originalString);

    }
}

int main()
{
    typedefAndStructHandle(1,"dummy");

}

该程序将复制单词&#34; dummy&#34;并将其写在链接列表中。我创建了自己的strdup,名为mystrdup。我认为mystrdup有问题。在

printf("structList->string: %s\n",structList->string);

它应该打印单词structList->string: dummy,但我的输出是structList->string: null有没有人知道如何修复它?

3 个答案:

答案 0 :(得分:0)

mystrup需要返回字符串,而不是将其作为参数。

所以,替换

 char* mystrdup(char* originalString)

newString

然后在本地声明free并将其返回。

调用者需要将返回值保存在变量中并最终在其上调用cd /data find 199[012345] -name "*.dat" -exec echo mv {} /data1/{} \;

答案 1 :(得分:0)

void mystrdup(char* newString, char* originalString)

您正在为一个本地变量(newString)保留空间,该变量的生命周期以该函数结束,而是从函数返回一个指针:

char *mystrdup(char *originalString)
{
    char *newString = malloc(strlen(originalString) + 1);
    ...
    return newString;
}

答案 2 :(得分:0)

你可以试试这个:

void mystrdup(char* originalString)
{   
 structList->string = originalString;
}

不需要或不知道您想要使用该功能做什么。 当您将此函数称为 strcpy 的值时,它为空,因此当您打印时给出 NULL