【发布时间】:2019-02-06 13:55:02
【问题描述】:
在调用 print_compressed()(代码如下)时,程序会正确打印字符,但在 printf() 执行后(打印数值),还会打印一个附加字符。此字符在终端上不可见。但是在将输出保存到文件时,它表示为“^@”(使用 nano 编辑器)。
void modify(char *ch, int *cons, char *vow)
{
if (strchr(vowels, *ch) == NULL) {
if (*vow) {
putchar(*vow);
*vow = 0;
}
++*cons;
} else {
if (*cons) {
printf("%i", *cons);
*cons = 0;
}
if (*vow != *ch)
putchar(*vow);
*vow = *ch;
}
}
void print_compressed(char *s)
{
putchar(toupper(*(s++)));
int curr = 0;
int cons = 0;
char vow = 0;
while (s[curr]) {
modify(s + curr, &cons, &vow);
++curr;
}
modify(s + curr, &cons, &vow);
putchar('\n');
}
输入: aaabcdefee
预期输出: aa3e1e
终端上的输出与预期相同
输出保存为文件时的输出: A^@a3^@e1^@e
【问题讨论】:
-
你的输出和预期的输出是一样的。
-
@Blaze 也许是编辑器问题?见“这个字符在终端上不可见”
-
我会显示一张图片,等等
-
^@是一个空字节。也许您也在字符串末尾写空字节? -
我怀疑
modify(s + cur, …)行,但 MCVE (minimal reproducible example) 会有所帮助。