使用memcpy将字符串复制到char数组时出现分段错误

时间:2014-09-08 09:18:33

标签: c segmentation-fault memcpy

我想在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;

}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

struct A
{
  char name[100];
};

然后你必须为你声明的A *a指针分配内存。更好的方法是使用普通变量A a,然后使用点操作符访问该成员(不确定这是否真的是一个操作符,但此刻不会想到正确的单词)。一个简单的片段是:

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

一些文档不会造成伤害:memcpy()