C语言结构
我正在学习C语言。有谁能帮助我理解以下结果:C语言结构,c,C,我正在学习C语言。有谁能帮助我理解以下结果: int main() { struct xx { int x; char name[]; }; struct xx *s; printf("%d",s->x); printf("%s",s->name); return 0; } 输出:-分段故障 我写了另一个代码: struct Foo { char *pName; }; int main() { struct Foo *obj
int main()
{
struct xx
{
int x;
char name[];
};
struct xx *s;
printf("%d",s->x);
printf("%s",s->name);
return 0;
}
输出:-分段故障
我写了另一个代码:
struct Foo
{
char *pName;
};
int main()
{
struct Foo *obj = malloc(sizeof(struct Foo));
strcpy(obj->pName,"Your Name");
printf("%s", obj->pName);
return 0;
}
输出:分段故障(堆芯倾倒)
为什么我会犯错?代码怎么了?核心倾销的含义是什么
main()
应具有标准格式(intmain(void)
),并返回一个int
值s
obj
struct Foo
main()
应具有标准格式(intmain(void)
),并返回一个int
值s
obj
struct Foo
为结构声明了指针,但指针从未初始化,也从未创建任何结构<代码>s指向一些随机内存空间,您试图从中读取
在第二种情况下,您有一个从未分配过内存的指针
pName
。它还指向一个随机内存空间。您正在从字符串文本复制字符串并写入随机内存位置。为结构声明了指针,但指针从未初始化,也从未创建任何结构<代码>s指向一些随机内存空间,您试图从中读取
在第二种情况下,您有一个从未分配过内存的指针
pName
。它还指向一个随机内存空间。您正在从字符串文本复制字符串并写入随机内存位置。在示例1中,您声明了一个指针,但尚未初始化它。因此,指针指向未知位置
在示例2中,obj->pname出于同样的原因指向内存的未知部分(未初始化),因此尝试在strcpy中访问它将导致程序崩溃
您应该做的事情:您应该为指针分配一些内存,使它们指向属于您的内存,而不是内存的随机(非法?)部分。在示例1中,您声明了一个指针,但尚未初始化它。因此,指针指向未知位置
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct xx
{
int x;
char name[25]; /* mention size of array */
};
struct xx *s;
s=(struct xx *)malloc(sizeof(struct xx)); /* allocate the size for pointer variable */
printf("Enter the value\n");
scanf("%d",&s->x); /*get the value */
printf("Enter the name\n");
scanf("%s",s->name);
printf("%d\n",s->x); /*get the value */
printf("%s\n",s->name);
return 0;
}
在示例2中,obj->pname出于同样的原因指向内存的未知部分(未初始化),因此尝试在strcpy中访问它将导致程序崩溃
您应该做的事情:您应该为指针分配一些内存,使它们指向属于您的内存,而不是内存的一些随机(非法)部分
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct xx
{
int x;
char name[25]; /* mention size of array */
};
struct xx *s;
s=(struct xx *)malloc(sizeof(struct xx)); /* allocate the size for pointer variable */
printf("Enter the value\n");
scanf("%d",&s->x); /*get the value */
printf("Enter the name\n");
scanf("%s",s->name);
printf("%d\n",s->x); /*get the value */
printf("%s\n",s->name);
return 0;
}
#包括
int main()
{
结构xx
{
int x;
字符名[25];/*提及数组大小*/
};
结构xx*s;
s=(struct xx*)malloc(sizeof(struct xx));/*为指针变量分配大小*/
printf(“输入值”);
scanf(“%d”,&s->x);/*获取值*/
printf(“输入名称”);
scanf(“%s”,s->name);
printf(“%d\n”,s->x);/*获取值*/
printf(“%s\n”,s->name);
返回0;
}
#包括
#包括
int main()
{
结构xx
{
int x;
字符名[25];/*提及数组大小*/
};
结构xx*s;
s=(struct xx*)malloc(sizeof(struct xx));/*为指针变量分配大小*/
printf(“输入值”);
scanf(“%d”,&s->x);/*获取值*/
printf(“输入名称”);
scanf(“%s”,s->name);
printf(“%d\n”,s->x);/*获取值*/
printf(“%s\n”,s->name);
返回0;
}
您已声明指针变量,但尚未为其分配内存
在strict xx*S之后添加代码>
S=(struct xx*) malloc(sizeof(strict xx));
并声明字符名[30]
的第一个大小 您已声明指针变量,但尚未为其分配内存
在strict xx*S之后添加代码>
S=(struct xx*) malloc(sizeof(strict xx));
并声明字符名[30]
的第一个大小 首先需要分配变量的大小,因为编译器不了解应该分配给变量的内存大小。这就是为什么需要将内存分配为:
S=(结构xx*)malloc(sizeof(结构xx)) 首先需要分配变量的大小,因为编译器不了解应该分配给变量的内存大小。这就是为什么需要将内存分配为:
S=(结构xx*)malloc(sizeof(结构xx)) 很高兴看到有人在使用C语言
好的,,…在您的第一个代码中,您并没有为ss变量分配内存,您正在访问它的值,所以它会生成分段错误
在第二种情况下,,,pName是一个字符指针..所以不能在strcpy()函数中使用它 很高兴看到有人在使用C语言
好的,,…在您的第一个代码中,您并没有为ss变量分配内存,您正在访问它的值,所以它会生成分段错误
在第二种情况下,,,pName是一个字符指针..所以不能在strcpy()函数中使用它 结构中的指针不是