C输出结果多一个%

0x00问题描述

刷Leetcode过程中测试代码输出结果

1
2
3
4
5
6
7
8
#include<stdio.h>
int main(){
char *s="asdfghj";
while(*s){
putchar(*s++);
}
return 0;
}

终端输出结果如下

image-20221029082623397

发现输出结果不应该带有%


0x01踩坑过程

分别用GCC和Clang编译相同文件并输出,得到相同的结果

image-20221029083142163

由于我使用的silicon mac

不知道是不是底层架构不同,arm和x86运行结果不同

刚好有一台x86 centos服务器

ssh远程连上去用gcc编译相同测试代码

image-20221029083506069

看到此时没有%出现

但是输出结果后,并没有换行的操作

在本机运行二进制文件,发生了换行

这个时候想到%会不会是shell的换行标识符

因为centos没有用zsh而本机的shell环境是zsh

于是在centos使用zsh运行output

image-20221029083847536

相同的问题出现了

末尾出现了%

应该是zsh处理不换行的命令的一种特性


0x03反思和学习