在 C 中使用 printf() 打印出这个字符符号 ÿ (ASCII 152)

Lig*_*991 1 c printf ascii

我无法打印这个特殊符号 \xc3\xbf (ASCII 152)。查看调试器,我可以看到变量正在保存特殊符号。目前它只打印一个空格。

\n\n

我的简化代码看起来像这样

\n\n

结构:

\n\n
typedef struct BufferDescriptor {\n    char* cb_head;\n}* pBuffer;\n\n//Current object\npBuffer ptr_Buffer;\n
Run Code Online (Sandbox Code Playgroud)\n\n

将符号添加到 cb_head 的行:

\n\n
//Calling addsymbol, the symbol used is EOF\naddsymbol(ptr_Buffer, EOF);\n\nBuffer* addsymbol(Buffer p, char symbol){\n    p->cb_head[add] = symbol;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 printf,我已经检查了变量缓冲区的值,它包含 \xc3\xbf 符号。\n但它只是打印出一个空格...是否有一些可能与机器相关的东西或我缺少的有关 ASCII 的东西。

\n\n
printf("%c",buffer);\n
Run Code Online (Sandbox Code Playgroud)\n

Sch*_*ern 5

如果相同的数字在不同的程序中显示不同,则可能是字符编码问题。有很多很多不同的方法可以将数字 152 解释为字符。每个应用程序可以使用不同的编码。听起来您的编辑器以及您要打印的位置都使用不同的编码。

\n\n

没有 ASCII 152。ASCII 是 7 位,只能到 127。

\n\n

有很多很多的ASCII 扩展编码,添加第 8 位来覆盖 128-255。它们的前 127 个字符共享相同的编码,之后它们就不同了。CP 437 和CP 850\xc3\xbf152。Latin -1Windows-1252 \xc3\xbf为 255。大多数现代东西使用UTF-8,它表示\xc3\xbf为两个字节,c3 bf.

\n\n

152 在 Latin-1 中什么都不是,在 UTF-8 中什么也不是。

\n\n

可能发生的情况是有些使用 UTF-8(152 无效),有些使用 CP 850(152 无效\xc3\xbf)。检查 IDE 的字符编码以及您用来显示的内容。

\n