構造体配列付与の問題
1521 ワード
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"
struct stu{
int x;
char name[10];
};
int main(void){
struct stu s={8,"123"};//
printf("%d %s
",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 x;
char name[10];
};
int main(void){
struct stu s;
strcpy(s.name,"abcd");// name
s.x=128;
printf("%d %s
",s.x,s.name);
return 0;
}
文字配列に文字列を直接付与できないのはなぜですか?ネット上の各神様は、文字配列を初期化する際に、配列のメモリアドレスが確定しているため、これ以上修正できないと話しています.
配列に直接値を割り当てる文字列は、初期化時に値を割り当てるだけでなく、2つの関数、void*memcpy(void*dest、const void*src、size_t n)を使用することができます.strcpy(str1,str2).
個人的には、文字配列を初期化すると、コンパイラは文字配列のヘッダ要素に初期アドレスを付与します.その後、文字配列に文字列を追加します.このとき、文字配列にはアドレスがあり、コンパイラは文字配列の要素に値を割り当てると思っています.したがって、この場合、単一の文字配列要素に単一の文字を割り当てることができますが、文字列を割り当てることはできません.