C printf在每个数字后打印无效字符
调用print_compressed()时(下面给出的代码),程序会正确打印字符,但在执行printf()后(打印数值),还会打印一个额外的字符。此字符在终端上不可见。但在将输出保存到文件时,它将表示为“^@”(使用nano编辑器) 输入: aaabcdefee 预期产出: Aa3e1e 终端上的输出与预期相同 输出保存为文件时的输出: A^@a3^@e1^@eC printf在每个数字后打印无效字符,c,printf,C,Printf,调用print_compressed()时(下面给出的代码),程序会正确打印字符,但在执行printf()后(打印数值),还会打印一个额外的字符。此字符在终端上不可见。但在将输出保存到文件时,它将表示为“^@”(使用nano编辑器) 输入: aaabcdefee 预期产出: Aa3e1e 终端上的输出与预期相同 输出保存为文件时的输出: A^@a3^@e1^@e 查看modify功能中的程序逻辑。 如果找到一个元音,如果之前不是0,则将其设置为*vow=0。 在下一步中,如果找不到元音,则输出*
查看
modify
功能中的程序逻辑。
如果找到一个元音,如果之前不是0,则将其设置为*vow=0
。
在下一步中,如果找不到元音,则输出*vow
,即
空字节。然后,设置*vow=*ch
所以当它找不到元音,以前也找过元音的时候,
在这之前是一个非元音,一个0字节被打印出来
重新思考你的逻辑:)
或者干脆改变
if (*vow != *ch)
putchar(*vow)
到
查看
modify
功能中的程序逻辑。
如果找到一个元音,如果之前不是0,则将其设置为*vow=0
。
在下一步中,如果找不到元音,则输出*vow
,即
空字节。然后,设置*vow=*ch
所以当它找不到元音,以前也找过元音的时候,
在这之前是一个非元音,一个0字节被打印出来
重新思考你的逻辑:)
或者干脆改变
if (*vow != *ch)
putchar(*vow)
到
您的输出和预期的输出是相同的。@Blaze可能是编辑器的问题?请参阅“此字符在终端上不可见”我将显示一个图像,
^@
为空字节。可能您也在字符串末尾写入空字节?我怀疑modify(s+cur,…)
行,但MCVE()会有所帮助。您的输出和预期的输出是相同的。@Blaze可能是编辑器问题?请参阅“此字符在终端上不可见”我将显示一个图像,^@
为空字节。也许您也在字符串的末尾写入空字节?我怀疑modify(s+cur,…)
行,但是MCVE()会有所帮助。或者if(*vow!=*ch&&*vow!='\0')putchar(*vow)
,如果(*vow!=*ch&&*vow)putchar(*vow),有些人会将其缩短为代码>。就个人而言,我认为较长版本的对称性更好,编译器将以任何方式生成相同的代码
,如果(*vow!=*ch&&*vow)putchar(*vow),有些人会将其缩短为代码>。就我个人而言,我认为较长版本的对称性更好,编译器将以任何方式生成相同的代码。
if (*vow != *ch)
if (*vow) putchar(*vow);