結構體字元資料初始化

2021-06-19 00:09:00 字數 1298 閱讀 7569

結構體裡面的 字元陣列 怎麼不能初始化?

我定義了乙個結構體:

struct database

skk;

skk.name = "abcde";

這個怎麼不能給name 賦值?

struct database

; 這種結構體宣告倒是對的,最新的c標準支援這種寫法,但是,初始化它就沒這麼簡單了,前面還沒有乙個人說對正確的初始化辦法呢

並且,這個東西的初始化,只能手工,先用malloc(sizeof(struct database) + size);

其中size是你希望的name的長度,然後你只能用strcpy這樣的方式初始化了

這種結構體如果直接 struct database skk 這樣,那就沒意義了。

#include

#include

#include

typedef struct student

student_info;

student_info person;

int main( void )

gcc編譯

錯誤1:「錯誤:expected expression before 『]』 tok」

原因:

c語言只有在定義字元陣列的時候才能用「=」來初始化變數,其它情況下是不能直接用「=」來為字元陣列賦值的,
錯誤2:「錯誤:賦值時型別不相容」

原因:結構體中陣列成員name表示陣列名,是乙個指標,具有常量特性,表示陣列儲存空間的開始位址,而c語言中不能對常量賦值。

解決辦法:

字串有三種賦值方法:a、宣告字串時直接賦值;b、用scanf函式給字串輸入值;

c、用strcpy函式給字串賦值 ,這種方法最為常用

要為字元陣列賦值可以用string.h

標頭檔案中的strcpy函式來完成。

例如:
char a[10] = "123"; /*正確,在定義的時候初始化*/
char a[10];
a = "123"; /*錯誤,不能用「=」直接為字元陣列賦值*/
strcpy(a, "123"); /*正確,使用strcpy函式複製字串*/
所以要對game[0][0].cpart賦值應該用strcpy(game[0][0].cpart, "123")才對。
注意要使用strcpy函式要用#include 包含string.h標頭檔案。
以上內容部分參考:

結構體初始化 指定初始化

參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...

結構體初始化

結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...

C 結構體初始化

今天在看mfc結構時,順便看了看 深入淺出mfc 發現有這麼一行 m pmainwnd new cmyframewnd 乍一看,很正常啊,再仔細一看,貌似 new cmyframewnd 的時候少了一對括號。奇怪!之後又翻了翻書,發現好多處都是這樣的。難道我弄錯了,不可能啊,一般情況下在new乙個新...