結構體中字元陣列賦值字串問題

2021-08-06 01:46:04 字數 1619 閱讀 4939

今天在看結構體變數時發現乙個問題:

問題**如下

int main() s1;

s1.c="china";

printf("%s",s1.c);

return 0;}

輸出結果為空,不知道是為什麼?

經過網上的答案盡是如此:

c語言只有在定義字元陣列的時候才能用「=」來初始化變數,其它情況下是不能直接用「=」來為字元陣列賦值的,要為字元陣列賦值可以用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標頭檔案。

給c語言結構體中的char陣列賦值有兩種方式:

1、在宣告結構體變數時賦值:

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

structstu;

intmain(void);//這樣初始化

printf("%d %s\n",s.x,s.name);

return0;

}

2、向陣列直接拷貝字串:

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

#include "string.h"

structstu;

intmain(void)

至於為什麼不能直接給字元陣列賦值字串呢?網上各大神說的是,因為在初始化字元陣列時,陣列的記憶體位址已經確定,不能再做修改。

想要直接給陣列賦值字串除了在初始化時賦值,還可以通過兩個函式,void *memcpy(void*dest, const void *src, size_t n);,strcpy(str1,str2)。

個人的理解是:在初始化字元陣列時,編譯器會給字元陣列首元素賦予初始位址。而後再另外給字元陣列賦值字串,此時字元陣列已經具有位址,編譯器就會以為是你要給字元陣列某個元素賦值。所以說此時是可以給單個字元陣列元素賦值單個字元的,但是不可以賦值字串。

結構體中字元陣列賦值字串問題

今天在看結構體變數時發現乙個問題 問題 如下 int main s1 s1.c china printf s s1.c return 0 輸出結果為空,不知道是為什麼?經過網上的答案盡是如此 c語言只有在定義字元陣列的時候才能用 來初始化變數,其它情況下是不能直接用 來為字元陣列賦值的,要為字元陣列...

C語言結構體中字串賦值

struct student char name 20 include main struct student s1 s1.name zhang printf s n s1.name return 0 以上的 編譯會提示出錯,因為在c結構體中,字串不能直接這樣賦值,需要用字串拷貝語句strcpy,如...

字串字元陣列的賦值

字元陣列的定義與初始化 char str 10 如果說提供的字元的個數大於陣列的長度,就按語法錯誤處理,如果小於陣列的長度,不夠的位置用空字元補全 0 字元陣列與字串 1 c 語言中將字串當做字元陣列來處理 字串的結束標誌是 0 而前面的所有字元組成字串,不算 0 2 對於字串常量的話,系統會自動在...