为啥第三个第四个为啥输出的是5和e

如下图,用printf来输出,为啥第三个第四个为啥输出的是5和e

img

  1. 在C++中,反斜杠后面加一个数字表示一个八进制数,而不是一个十进制数。在这种情况下,"\65"所表示的是一个八进制数,其对应的十进制数值为:65(八进制) = 53(十进制)。因此,当您在C++中使用 printf("\65\n") 时,输出的是字符编码为 53 的字符,即字符 '5'。

至于,ACSII值和字符的转换关系,你可以查ASCII表。

  1. 在C语言中,printf("\x65\n")的输出是字母 'e',后面紧接着一个换行符 '\n'。

这是因为在C语言中,以反斜杠(\)开头的字符序列都表示特殊的字符。例如,\n表示一个换行符,\表示一个反斜杠,\t表示一个制表符。同时,\x表示一个十六进制数的开始符号。

因此,printf("\x65\n")会先解析出特殊字符 \x65,然后将其转换成十进制数101,代表ASCII表中的字母 'e'。最后输出字符 'e' 和一个换行符 '\n',即输出 "e\n"。

\6是不可见字符,所以只输出了5
\x65是ASCII码是十六进制65的字符,就是字符e

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7530393
  • 除此之外, 这篇博客: C语言printf函数详解和示例中的 5、格式化输出到字符串 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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个字符。