簡體   English   中英

無法通過指針 [C] 為結構的變量賦值

[英]Can't assign value to a structure's variable via pointer [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”后嘗試打印點的名稱時,程序除了退出代碼之外什么都不做 output ,這(可能)是一個隨機數:

Process finished with exit code -1073741819 (0xC0000005)

事實上,指針對我來說是一個很難理解的概念(我以前曾在 python 中編程),因此我可能遺漏了一些東西。 我也嘗試過使用其他變量類型,例如 int,但結果是相同的(即使退出狀態號相同)。 有沒有辦法解決這種行為?

PS:對不起,我的初級英語,我還在練習,非常感謝你的時間!

您必須使用 malloc 來分配 poin_t 結構的 memory。 就像是

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

正如其他人提到的那樣,非常重要的是pt->p_name = "a"也是錯誤的,你正在分配 int a char a const char*我在我的示例中修復

在您的代碼中

  pt->p_name = "A";

錯誤有兩個主要原因:

  1. 您從未將pt指向任何有效的 memory 位置。 嘗試取消引用無效的 memory 會調用未定義的行為。
  2. p_namechar類型。 "A"是一個字符串文字,類型為char [x] ,歸結為char *用於賦值,它們不是兼容的類型。

你需要

  1. 確保pt指向有效的 memory 位置。 實際上,這里根本不需要指針。 pt定義為結構體類型的變量(不是指針變量),並通過. 操作員。
  2. 使用'A'進行賦值,如字符常量,而不是字符串。

指針必須指向某處。 您永遠不會為指針pt分配值,並且嘗試取消引用未初始化的指針值會調用未定義的行為

您還將字符串分配給字符值。 字符串使用雙引號,而單個字符使用單引號

對字符使用單引號,並且必須首先使指針指向某處:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM