我正在尝试将字符串从一个字符*复制到另一个字符*,但不知道为什么复制不起作用。
我正在编写一个链表程序 - Linklist
- 并且涉及两个char *
指针。每个都指向一个struct Node
,如下所示:
struct Node
{
char * message;
char * text;
struct Node * next;
};
typedef struct Node * Linklist;
我编写了一个函数,其中包含两个参数来创建新LinkNode
:
Linklist create(char *message,char * text)
{
Linklist list =(Linklist)malloc(sizeof(struct Node));
//the message changes after the sentence but text is right.
if(list==NULL) printf("error:malloc");
list->message=message;
list->text=text;
return list;
}
主要:
字符 *消息是"Helloworld"
字符 *文本是"测试"
我在 gdb 中观看了消息,在 malloc 之后。消息更改为"/21F/002",但文本仍为"测试"
我在消息之前添加了const
,但它不起作用。
谁能知道发生了什么?
谢谢。
问题是 c 中的字符串的工作方式不同。 以下是复制字符串的方法:
Linklist create(char *message,char * text)
{
Linklist list =(Linklist)malloc(sizeof(struct Node));
//the message changes after the sentence but text is right.
if(list==NULL) printf("error:malloc");
list->message = malloc(strlen(message)+1);
if(list->message==NULL) printf("error:malloc");
strcpy(list->message,message);
list->text = malloc(strlen(text)+1);
if(list->text==NULL) printf("error:malloc");
strcpy(list->text,text);
return list;
}
当然,您必须在这里小心,确保消息和文本不是来自用户,否则您将面临缓冲区溢出漏洞的风险。
你可以使用 strncpy() 来解决这个问题。
必须为指针消息和文本分配存储空间,然后复制字符串。