似乎这是一个重复的问题,但是我搜索了stackoverflow关于这一点的问题而非我喜欢我的问题(我认为)
我有一个struct的两个变量,每个变量都有自己的char指针,当我尝试从一个变量的字符串复制到另一个变量的字符串时,没有任何反应,尽管没有出现错误,只是警告
implicit declaration of function strcpy
incompatible implicit declaration of built-in function 'strcpy'
我从stackoverflow的一些问题中读到你最好使用strdup()函数而不是strcpy()但是当我这样做时,我有一个错误
too many arguments to function 'strdup'
我读到strcpy()称为“分段错误”的问题,我知道它是关于内存分配的,我不完全理解它是什么,并且不知道我的代码是否存在问题?
这是我的代码
struct p
{
char *name;
struct p *next;
};
struct p *ptrary[10];
int main(void)
{
struct p p,q;
p.name="xyz";
p.next=NULL;
ptrary[0]=&p;
strdup(q.name,p.name);
ptrary[1]=&q;
printf("%s\n",ptrary[1]->name);
return 0;
}
那么问题是什么以及我如何解决它?
答案 0 :(得分:2)
strdup()只接受一个参数;它是malloc的并返回一个包含重复字符串的新的堆内存块。 (见https://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c)
这可能也指出了你之前遇到过的问题 - 你是否还记得将q空间用于复制p的内容?
答案 1 :(得分:1)
更改
strdup(q.name,p.name);
到
q.name = strdup(p.name);
see man page of strdup for further details。 strdup()函数返回一个指向新字符串的指针。
完整代码:
#include <stdio.h>
#include <string.h>
struct p
{
char *name;
struct p *next;
};
struct p *ptrary[10];
int main(void)
{
struct p p,q;
p.name="xyz";
p.next=NULL;
ptrary[0]=&p;
q.name = strdup(p.name);
ptrary[1]=&q;
printf("%s\n",ptrary[1]->name);
return 0;
}