字符变量与字符数组


 1 #include 
 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

会随机乱码