小编Ale*_*lio的帖子

C-输出中的字符显示不正确

我可以è在源代码中插入字符,但是在程序的输出中不能正确显示该字符;Þ角色出现在它的位置。

èASCII字符扩展对应的138

è在Unicode字符相匹配的232号码。

Þ在ASCII字符扩展对应的232号码。

Þ在Unicode字符相匹配的222号码。

通过调试器,可能会注意到编译器è使用数字232进行转换,并将整数转换138为字符Š(行制表集),而在输出中,字符数232表示为Þ,而字符数138表示为è

幕后发生了什么?

样例代码:

#include <stdio.h>

int main (void)
{
    unsigned char a = 'è';
    unsigned char b = 138;

    printf ("Char a:% c \ n", a);
    printf ("Char a:% d \ n \ n", a);
    printf ("Char b:% c …
Run Code Online (Sandbox Code Playgroud)

c character

3
推荐指数
1
解决办法
89
查看次数

为什么printf说明符格式%n不起作用?

这是我的代码:

#include <stdio.h>

int main(void) {
    int n;

    fprintf(stdout, "Hello%n World\n", &n);
    fprintf(stdout, "n: %d\n", n);

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

Hellon: 0
Run Code Online (Sandbox Code Playgroud)
  1. 为什么fprintf格式说明符"%n"不起作用?
  2. 为什么要打印的字符串被中断?

ISO/IEC 9899:201x C11 - 7.21.6.1 - fprintf功能

转换说明符及其含义是:

(......)

%n参数应该是一个指向有符号整数的指针,其中写入到目前为止通过调用fprintf写入输出流的字符数.没有参数被转换,但是消耗了一个参数.如果转换规范包括任何标志,字段宽度或精度,则行为未定义....

(......)

这是我在Code :: Blocks上使用的编译器版本:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/Program\ Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev
0/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --bu
ild=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysr
oot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable
-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdc
xx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-
lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --
enable-version-specific-runtime-libs --disable-libstdcxx-pch …
Run Code Online (Sandbox Code Playgroud)

c printf specifier

2
推荐指数
1
解决办法
175
查看次数

标签 统计

c ×2

character ×1

printf ×1

specifier ×1