如下图,用printf来输出,为啥第三个第四个为啥输出的是5和e
至于,ACSII值和字符的转换关系,你可以查ASCII表。
这是因为在C语言中,以反斜杠(\)开头的字符序列都表示特殊的字符。例如,\n表示一个换行符,\表示一个反斜杠,\t表示一个制表符。同时,\x表示一个十六进制数的开始符号。
因此,printf("\x65\n")会先解析出特殊字符 \x65,然后将其转换成十进制数101,代表ASCII表中的字母 'e'。最后输出字符 'e' 和一个换行符 '\n',即输出 "e\n"。
\6是不可见字符,所以只输出了5
\x65是ASCII码是十六进制65的字符,就是字符e
int printf(const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
printf是把结果输出到屏幕,sprintf把格式化输出的内容保存到字符串str中,snprintf的n类似于strncpy中的n,意思是只获取输出结果的前n-1个字符,不是n个字符。
C语言提供了把字符串转换为整数和浮点数据的库函数,但是没有把整数和浮点数据转换为字符串的库函数,而是采用sprintf和snprintf函数格式化输出到字符串。
示例(book98.c)
/*
* 程序名:book98.c,此程序演示格式化输出sprintf和snprintf函数。
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <string.h>
int main()
{
char str[301];
// 格式化输出到str中
sprintf(str,"%d,%c,%f,%s",10,'A',25.97,"一共输入了三个数。");
printf("%s\n",str);
// 格式化输出到str中,只截取前7个字符
snprintf(str,8,"%d,%c,%f,%s",10,'A',25.97,"一共输入了三个数。");
printf("%s\n",str);
}
运行结果
程序运行第二行只输出了6个字符,注意,snprintf函数在unix和windows平台下的表现略有不同,在windows平台下,第二行会输出7个字符。