字符变量与字符数组
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
会随机乱码