首页 > 解决方案 > 无法通过指针 [C] 为结构的变量赋值

问题描述

我对 C 很陌生。我正在尝试创建一个简单的程序来使用结构来表示一个点。它看起来像这样:

// including standard libraries
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <assert.h>

// including user defined libraries
;


typedef struct point {
    char p_name;
    double *p_coords;
} point_t;


int main() {

    point_t *pt;
    pt->p_name = "A";
    printf("%c", pt->p_name);



    // returning 0 if there are no errors
    return 0;

}

问题是,当我在为它分配名称“A”之后尝试打印点的名称时,程序除了退出代码(可能是一个随机数)之外什么都不输出:

Process finished with exit code -1073741819 (0xC0000005)

事实上,指针对我来说是一个很难理解的概念(我以前用 python 编程过),因此我可能遗漏了一些东西。我也尝试过使用其他变量类型,例如 int,但结果是相同的(即使退出状态号相同)。有没有办法解决这种行为?

PS:对不起,我的初级英语,我还在练习,非常感谢你的时间!

标签: cpointersstructtypedef

解决方案


在您的代码中

  pt->p_name = "A";

错误有两个主要原因:

  1. 您从未pt指出任何有效的内存位置。尝试取消引用无效内存会调用未定义的行为。
  2. p_name是类型char"A"是一个字符串字面量,类型为char [x],归结为char *for 赋值,它们不是兼容的类型。

你需要

  1. 确保pt指向有效的内存位置。实际上,这里根本不需要指针。定义pt为结构体类型的变量(不是指针变量),通过.操作符访问成员。
  2. 用于'A'赋值,如字符常量,而不是字符串。

推荐阅读