我正在尝试用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
有没有人知道如何修复它?
答案 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