字元變數與字元陣列
阿新 • • 發佈:2022-04-12
1 #include <stdio.h>
2
3
4 int main()
5 {
6 char ch1;
7 char ch2[] = "abcde";
8 ch1 = 'A';
9 printf("%c\n", ch1);
10 printf("%s\n", ch2);
11
12
13 getchar();
14 }
其一:字元變數賦值時單引號誤寫為雙引號
ch1 = "A";
報錯
警告 1 warning C4047: “=”:“char”與“char [2]”的間接級別不同 c:\code\project2\project2\源.c 8 1 Project2
其二:字元陣列的建立及初始化
只能為
char ch2[] = "abcde";
若寫成
char ch2[];
ch2 = "abcde";
警告 1 IntelliSense: 不允許使用不完整的型別 c:\code\Project2\Project2\源.c 7 7 Project2
2 IntelliSense: 表示式必須是可修改的左值 c:\code\Project2\Project2\源.c 8 2 Project2
ch2作為陣列名,相當於指標常量,不能放在賦值號左側
它只是陣列第一個元素的地址的值,並不是儲存第一個元素地址的變數。
可以使用
char * str;
str = "abc";
然而 在vs2013中
struct one
{
char a;
char c[];
int b;
};
會報錯
錯誤 1 error C2229: struct“one”有非法的大小為零的陣列 c:\code\project2\project2\源.c 18 1 Project2
2 IntelliSense: 不允許使用不完整的型別 c:\code\Project2\Project2\源.c 17 8 Project2
但只要交換兩行位置
struct one
{
char a;
int b;
char c[];
};
不會報錯,原因不明
其三 列印時,用錯%s 與 %c
字元變數使用 %s
ch1 = 'A';
printf("%s\n", ch1);
點中斷再停止除錯即可
若點中斷之後再關閉控制檯視窗會卡死
字元陣列使用%c
會隨機亂碼