在打印普通的字符的时候,使用printf("%c")是毫无疑问的。
但是,如果是下面的情况呢?
#include <stdlib.h>
#include <stdio.h>
#define CC1 2
#define CC2 1
int main(int argc,char **argv)
{
signed char c1=CC1;
signed char c2=CC2;
printf("c1=%c,c2=%c\n",c1,c2);\\step 1
printf("c1=%d,c2=%d\n",c1,c2);\\step 2
getch();
return 1;
}
运行之后会发现,使用普通的step1中的打印语句无法正常打印。
其实也不是无法正常打印,只是在ASCII中,2和1都是控制字符,当然打印出乱码了。
这个时候使用step2语句进行打印,发现能够正常的打印出2、1这两个数字。
那么问题又来了,如果c1和c2的内存地址是连续的,使用%d进行打印,是很容易出现问题的。
那么,该怎么方便安全的打印出 c1和c2的值呢?
重新定义变量,并取c1和c2的值。
int a1=(int)c1;
int a2=(int(c2;
这样,既分开了两个变量的地址,又取出了真正的值。
总结:
针对变量使用了宏定义的值,在打印的时候应该依据宏定义的值的类型来进行打印,有两种方式。
1.来定义新的变量,获取变量的值。
2.对已有的变量进行强制类型转换,前提是不会出现内存访问越界的问题。

本文探讨了在C语言中使用宏定义变量时,如何安全地打印出其真实值,避免出现控制字符等问题。通过实例展示了两种有效的打印方法,并强调了依据宏定义变量类型选择合适打印方式的重要性。
3732

被折叠的 条评论
为什么被折叠?



