[英]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";
錯誤有兩個主要原因:
pt
指向任何有效的 memory 位置。 嘗試取消引用無效的 memory 會調用未定義的行為。p_name
是char
類型。 "A"
是一個字符串文字,類型為char [x]
,歸結為char *
用於賦值,它們不是兼容的類型。你需要
pt
指向有效的 memory 位置。 實際上,這里根本不需要指針。 將pt
定義為結構體類型的變量(不是指針變量),並通過.
操作員。'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.