1. 程式人生 > 其它 >字元變數與字元陣列

字元變數與字元陣列

 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

會隨機亂碼