为什么编译器会报错, 不能输出字符串f
0001
#include <stdio.h>
int main(void)
{
char a= 'f';
printf("%s", a);
return 0;
}
为什么编译器输乱码
0002
#include <stdio.h>
int main(void)
{
char a[5] = {'A','B','C','D','E'};
printf("%s\n", a);
return 0;
}
ABCDE烫烫烫?翅@堸?
为什么输出结果错误
003
#include <stdio.h>
int main()
{
printf("整形输出:%d\n", 1 + 2.0);
return 0;
}
整形输出:0
为什么a 的值打印不对
004
#include <stdio.h>
int main()
{
int i = 1;
unsigned int a = 4294967295;
printf("%d\n", sizeof(i)); //字节占用
printf("%d %d", a, a + 1);
return 0;
}
4
-1 0
以下为答案
0001
printf("%c", a); //此处打印函数使用错误 %c = 输出字符串
0002
为什么会出现乱码呢, 是因为存储字符串末尾会有 \0 作为编译器判断字符串结束.
如果没有预留给 编译器, 那么编译器会一直读取下去.!
char a[6] = {'A','B','C','D','E'}; //字符串常量
标准答案是,
char a[6] = {'A','B','C','D','E','\0'}; //字符串常量
其他写法
1.
char a[] = {'A','B','C','D','E','\0'}; //
2
char a[] = {"ABCDE"}; //字符串常量 这里是双引号
char a[] = "ABCDE"; //也可以去掉{}
0003
为什么第一个编译器会出错呢,
1+2 不等于3吗, 为什么1+2 等于 0 了呢.
因为 1 + 2.0 ,会自动 转换成 浮点型相加,
1.0 + 2.0 float. 而强制把他转换成整数输出, 所以编译器出错
printf("浮点型输出: %f\n", 1 + 2.0);
浮点型输出: 3.000000
0004
因为 unsigned 是无符号, 用%u输出啊~!!!
printf("%u %u", a, a + 1);
4294967295 0