strcpy()将字符串从一个结构复制到另一个结构

时间:2014-01-12 07:17:41

标签: c struct strcpy

似乎这是一个重复的问题,但是我搜索了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;
}

那么问题是什么以及我如何解决它?

2 个答案:

答案 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;
}