Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言结构_C - Fatal编程技术网

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

我正在学习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 = 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()函数中使用它

    结构中的指针不是