【问题标题】:strcpy() with copying string from one structure to another [closed]strcpy() 将字符串从一个结构复制到另一个 [关闭]
【发布时间】: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 的任何标头)。
  • 当您看到“隐式声明”时,您应该将其视为错误。如果它碰巧起作用也没关系,只需返回并修复问题,直到此消息不出现。

标签: c struct strcpy


【解决方案1】:

strdup() 只接受一个参数;它 malloc 并返回一个包含重复字符串的新堆内存块。 (见https://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c

这也可能指向您之前遇到的问题——您是否记得为 q 分配空间以将 p 的内容复制到其中?

【讨论】:

    【解决方案2】:

    改变

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

    【讨论】:

    • 是的,它对我有用,但 strcpy 有问题吗?
    • 为什么 strcpy 不起作用?
    • malloc q.name 然后使用strcpy
    • 所以 strcpy() 需要初始化内存位置。对吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2010-10-27
    • 2022-01-12
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多