【解决】在转义字符后面跟八进制数 \377

小弟非程序员,最近在苦学 C 语言。

看到 https://blog.csdn.net/littesss/article/details/70148523

image

解析 a占一个字节 \377 占一个字节 7占一个字节,这个7就是一个字符7

我自己电脑运行和上面截图一致。

但是解析我就看不懂了,“a\377” 不应该是两个字节吗? a 一个,\377 代表的 ascii code 255 码一个字节 https://www.ascii-code.com/255。

解析中的最后一个 7 哪里来的?

我用 google 查了没有相关,Stack Overflow 没有类似的。

可能问题太幼稚了,但望不吝赐教。

你看的解析是瞎说的,CSDN 你也敢信?排除干扰用正常字符实验下就知道了

#include <stdio.h>
#include <string.h>

int main() {
  char ch[] = "aa";
  printf("%d\n",sizeof(ch));
  printf("%d\n",strlen(ch));
  printf("%s",ch);
}

结果

3
2
aa

sizeof 是 3 是因为 C string 用 null 字符做为结束。你用

char ch[] = { 'a', 'a'};

sizeof 就会是 2,当然此时 strlen 结果就不可靠了。

StackOverflow 上搜不到?没办法,瞎说的当然是这样的。

建议去读 The C programming Language,中译本 C程序设计语言

5 个赞

补充一点:sizeof 是 operator 而 strlen 是由 string.h 提供的函数。所以这么写也是合法的:

#include <stdio.h>
#include <string.h>

int main() {
  char ch[] = "aa";
  printf("%d\n",sizeof ch);
  printf("%d\n",strlen(ch));
  printf("%s",ch);
}
1 个赞

感谢补充细小知识点。