今天在看結構體變數時發現乙個問題:
問題**如下
int main() s1;
s1.c="china";
printf("%s",s1.c);
return 0;
}輸出結果為空,不知道是為什麼?
經過網上的答案盡是如此:
c語言只有在定義字元陣列的時候才能用「=」來初始化變數,其它情況下是不能直接用「=」來為字元陣列賦值的,要為字元陣列賦值可以用string.h標頭檔案中的strcpy函式來完成。給c語言結構體中的char陣列賦值有兩種方式:例如: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標頭檔案。
1、在宣告結構體變數時賦值:
//#include "stdafx.h"//if the vc++6.0, with this line.
#include "stdio.h"
struct
stu;
int
main(
void
);
//這樣初始化
printf
(
"%d %s\n"
,s.x,s.name);
return
0;
}
2、向陣列直接拷貝字串:
//#include "stdafx.h"//if the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
struct
stu;
int
main(
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 對於字串常量的話,系統會自動在...