- 在结构体中,定义了一个指针(通常是野指针),在主函数中引用他的时候,如果是直接strcpy则会造成段错误。
- 错误例子:char *p; strcpy(p,"感觉自己萌萌哒");
- 在引用结构体中指针的时候必须要给空间malloc一下。此时顺带初始化memset。
- 而数组则可以直接strcpy( )
- 原因:
- 1.1 在结构体"Test"声明的时候,数组就已经有空间了
- 2.2 在结构体"Datas"声明之后,指针只是一个野指针,所以要malloc一下,安排一个空间给他
正确代码如下:
#include <stdio.h>
#include <stdlib.h>
//结构体最容易犯的错误,就是段错误,野指针的理解
//内存空间
struct Datas
{
char *p; //野指针,不给空间,会造成段错误。最好给空间的时候,顺手初始化memset
};
struct Test
{
char p[128];
};
int main()
{
struct Datas d;
d.p = (char *)malloc(128); //给结构体中野指针空间
memset(d.p,'\0',128); //初始化
strcpy(d.p,"感觉自己萌萌哒"); //不做上面的步骤,会造成段错误。初始化可不用,但是顺手带上最好
printf("%s\n",d.p);
//=============================================================
struct Test t;
strcpy(t.p,"这个就不会造成段错误");
printf("%s\n",t.p);
system("pause");
return 0;
}