【问题标题】:Segmentation fault while copying string to a char array using memcpy使用 memcpy 将字符串复制到 char 数组时出现分段错误
【发布时间】:2014-11-01 11:23:54
【问题描述】:

我想在 char 数组中存储一个字符串,我试图通过使用 memcpy() 来做到这一点,但我得到了一个 segmentation fault。有人可以解释为什么吗?以及这样做的正确方法是什么。

使用char * name;char name[100]; 哪个更好?

#include <stdio.h>

struct A
{
 char * name;

};

typedef struct A A ;

int main()
{

    A *a;

    memcpy(a->name,"hello",sizeof(A));
    printf("The value of name is %s",a->name);

    return 0;

}

【问题讨论】:

  • 试试 printf(sizeof(A))
  • 你没有为a分配任何内存指向。这同样适用于a-&gt;name。您需要为两者分配内存。
  • 你的指针 aa-&gt;name 都没有指向合理的地方。
  • 你可能会喜欢comp.lang.c FAQ,尤其是第6节。

标签: c segmentation-fault memcpy


【解决方案1】:

您必须为结构及其成员分配内存,然后才能在其中复制数据。

A *a = malloc(sizeof(A));
a->name=malloc(100); //change the size other then 100 what ever you want.

【讨论】:

    【解决方案2】:

    首先,您要问两个问题。您应该阅读一下here,以了解如何提出好的问题并获得好的答案。

    您得到分段错误,因为您没有为变量name 分配内存。根据您提供的代码和描述解决此问题的最快方法是在您的声明中使用char name[100]。请记住,这不是唯一可行的方法。这取决于你在做什么。

    struct A
    {
      char name[100];
    };
    

    然后你必须为你声明的A *a 指针分配内存。最好使用普通变量A a,然后使用点运算符访问该成员(不确定这是否真的是一个运算符,但目前没有想到正确的词)。一个简单的 sn-p 将是:

    ...
    A a;
    memcpy(a.name, "hello", 6);
    printf("The value of name is %s",a.name);
    ...
    

    一点文档也无妨:memcpy()

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2012-06-17
      • 1970-01-01
      • 2020-12-12
      相关资源
      最近更新 更多