【发布时间】:2014-01-12 07:17:41
【问题描述】:
这似乎是一个重复的问题,但我搜索了stackoverflow关于这一点的问题,而不是我的问题(我认为)
我有一个结构的两个变量,每个变量都有自己的指向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;
}
那么问题是什么,我该如何解决呢?
【问题讨论】:
-
在其余代码之前添加
#include <string.h>(并确保它自己在一行上)。strdup不是标准的,但典型用法如下:q.name = strdup(p.name);。 -
您是否尝试阅读函数的文档?我敢打赌它告诉你必须包含哪些头文件才能使用它们。
-
@JerryCoffin q.name=strdup(p.name);在不包括新库的情况下与我合作
-
@Salahuddin:您仍然应该几乎肯定包含
<string.h>(或在您的系统上声明strdup的任何标头)。 -
当您看到“隐式声明”时,您应该将其视为错误。如果它碰巧起作用也没关系,只需返回并修复问题,直到此消息不出现。