生信喵 发表于 2024-5-16 16:55:44

c语言字符输出乱码

# 背景

```
char a={'s','h','a','r','k'};
printf("%s\n",a);
```

输出

shark烫烫烫?"7#T?

```
char a={'s','h','a','r','\0'};
printf("%s\n",a);
```

输出则为shar

# 原因

在C语言中,一个字符串是以'\0'(空字符)结尾的字符数组。当我们使用字符串格式化输出时,例如使用printf("%s\n", a),程序会从数组a的起始位置开始输出字符,直到遇到'\0'为止。

在第一个代码片段中,数组a的长度为5,但是没有显式地在最后一个字符后面添加'\0',因此在打印输出时,会一直输出到最后一个字符('k')为止,然后继续向后输出数组中的内存内容,直到遇到内存中的'\0'为止。因此会输出"shark",然后继续输出随机的内存内容,导致输出为"shark烫烫烫?"7#T?"。

而在第二个代码片段中,在数组a的最后一个字符('r')后面显式地添加了'\0',因此在打印输出时,会输出从数组起始位置到遇到'\0'为止的内容,即"shar"。
页: [1]
查看完整版本: c语言字符输出乱码