我正在嘗試處理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");
}
該程序將複製單詞「dummy」並將其寫入鏈接列表中。我創建了我自己的strdup
,名爲mystrdup
。我認爲mystrdup
有問題。在生產線
printf("structList->string: %s\n",structList->string);
它應該打印字structList->string: dummy
但我的輸出是structList->string: null
沒有人有任何想法如何解決呢?
你'mystrdup'功能是有缺陷的,它修改*** ***局部變量'newString'的這一功能DE值。而且,當函數返回時,所有局部變量都將超出範圍,並且對它的所有更改都將丟失。正常的'strdup'函數返回*新字符串是有原因的。 –