#include<stdio.h>
struct MyStruct
{
int age;
char sex;
char name[100];
};
int main(void)
{
struct MyStruct st ;
st.age = 18;
st.name = "哈哈";
st.sex = 'M';
if (st.sex == 'M')
printf("年齡:%d 性別:男性 姓名:%s\n", st.age, st.name);
else
printf("年齡:%d 性別:女性 姓名:%s\n", st.age, st.name);
return 0;
}
這個編譯為什么會出錯呢?VC6.0 = cannot convert from 'char [5]' to 'char [100]'什么不能轉換?
uj5u.com熱心網友回復:
陣列不能賦值,st.name = "哈哈";是不行的,用strcpy()uj5u.com熱心網友回復:
樓上說的也對也不對,如果是單個陣列定義時進行初始化是可以賦值的,比如char name[50] = “哈哈”是可以的但是如果在定義時沒有進行初始化,那么以后都不可以進行初始化,比如char name[50]; name="haha" 是不可以的
而你的陣列放在結構體里面,是相當于第二種,已經定義好,但是沒有初始化。如果你這樣使用就是對的了
struct MyStruct st(18, "haha", ‘M’)
uj5u.com熱心網友回復:
=等于符號賦值字串要用指標型別 方括號是陣列型別uj5u.com熱心網友回復:
#include<stdio.h>
#include <windows.h>//----添加strcpy()函式的頭檔案----
struct MyStruct
{
int age;
char sex;
char name[100];
};
int main(int argc, char* argv[])
{
struct MyStruct st ;
st.age = 18;
strcpy(st.name, "哈哈");//---使用strcpy()函式進行拷貝-------
st.sex = 'M';
if (st.sex == 'M')
printf("年齡:%d 性別:男性 姓名:%s\n", st.age, st.name);
else
printf("年齡:%d 性別:女性 姓名:%s\n", st.age, st.name);
return 0;
}
VC++6.0 C++環境除錯結果
uj5u.com熱心網友回復:
1、定義的時候直接用字串賦值char a[10]="hello"; //sizeof(a)為10
或char a[]="hello"; //sizeof(a)為6
注意:不能先定義再給它賦值,如char a[10]; a[10]="hello";這樣是錯誤的!
uj5u.com熱心網友回復:
習慣在結構體中使用指標,不建議使用陣列,尤其是嵌入式開發uj5u.com熱心網友回復:
name是陣列,“哈哈”是字串,兩個內容存盤在不同的區域,c語言并不支持這種直接將字串賦值給陣列的寫法。只能按單元把字符寫入陣列中。這種寫法只在定義陣列時有效,被稱為初始化。不過把這種初始化如果寫在這個結構體中的話,可能并不能如題主所愿。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/19193.html
標籤:新手樂園
