【问题标题】:Printing the value of a structure pointer variable member打印结构指针变量成员的值
【发布时间】:2015-09-10 08:10:29
【问题描述】:

为什么我在编译后运行它时会出现“分段错误”错误?

//代码

#include <stdio.h>
#include <string.h>

void main(){

    struct name{
        char first[20];
        char last[20];
    } *person;

    strcpy(person->first, "jordan");
    strcpy(person->last, "davis");

    printf("firstname: %s\n", person->first);
    printf("lastname: %s\n", person->last);
}

【问题讨论】:

  • 你用什么编译它?什么是抛出错误?编译器,还是编译好的程序?
  • @ElmerCat 这是我编译后运行程序时的输出。
  • @JordanDavis:以后,更准确地描述事物。如果您在编译时遇到分段错误,那将是编译器崩溃,这可能非常令人兴奋,并且可能是一个错误,除非有非常不寻常的情有可原的情况——编译器不会崩溃。 OTOH,用户的程序在运行时确实经常崩溃。我已更新问题,以反映您的实际问题。

标签: c linux pointers structure


【解决方案1】:

因为person 指针尚未初始化。因此,当您取消引用指针时,没有有效的struct name 对象。

要么使用malloc:

person = malloc(sizeof *person);

或者只声明struct name 类型的对象而不是struct name *(然后不要忘记使用. 运算符而不是-&gt; 访问结构成员)。

【讨论】:

  • 不是在struct name 语句的末尾初始化它吗?
  • @Jordan person 指针从未初始化或分配,其值未指定。
  • 如果它没有被初始化......那我如何在我的strcpy() 语句中引用它......
  • struct name 语句的结尾} *person; 应该声明并将指针变量分配给name - 结构......这里是一个参考 --> tutorialspoint.com/cprogramming/c_structures.htm跨度>
  • @JordanDavis 一点也不,您将person 声明为struct name * 类型的对象(即指向struct name 的指针)。 person 对象从未初始化。
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 2016-09-24
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
相关资源
最近更新 更多