Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么现在在mingw和vs 2017中使用printf(“%c”,“\0”)时会有差异?_C_Visual Studio_Mingw - Fatal编程技术网

为什么现在在mingw和vs 2017中使用printf(“%c”,“\0”)时会有差异?

为什么现在在mingw和vs 2017中使用printf(“%c”,“\0”)时会有差异?,c,visual-studio,mingw,C,Visual Studio,Mingw,我使用了两种编译器来编译相同的代码: #include<stdio.h> int main(){ printf("%c", '\0'); return 0; } 我将得到mingw和vs2017汇编的不同结果。 在mingw中,我可以在控制台中获得一个空白。但在vs2017中,我得到了一个字符“a”,如下图所示 这是vs2017中的错误还是我的vs2017版本太低 这可能与您试图打印“\0”字符有关。这可能会导致未定义的行为。您可以尝试只打印普通字符,如“A”、“

我使用了两种编译器来编译相同的代码:

#include<stdio.h>

int main(){
    printf("%c", '\0');
    return 0;
}
我将得到mingw和vs2017汇编的不同结果。 在mingw中,我可以在控制台中获得一个空白。但在vs2017中,我得到了一个字符“a”,如下图所示


这是vs2017中的错误还是我的vs2017版本太低

这可能与您试图打印“\0”字符有关。这可能会导致未定义的行为。您可以尝试只打印普通字符,如“A”、“t”、“等等。

NUL不是EOF。EOF是来自各种读取函数的OOB值/状态ie.-1。它真的是未定义的行为吗?我想不是。printf%c,“\0”;不是UB,但屏幕上显示的标志符号是实现定义的-由终端定义-不是C。由于标准输出不是以二进制模式打开的,因此写入除打印字符、制表符或换行符以外的字符具有未指定的效果;它可能被打印,也可能不被打印,并且可能被独立于渲染的不同字符替换。所以从技术上讲,这是未指定的行为,而不仅仅是未指定的渲染。但实际上,它将写入一个NUL字节,然后由终端仿真器或IDE以某种未指定的方式呈现。我不需要查看文本并获取一个空格或字符“a”,如下图所示,而是将输出重定向到文件并报告其二进制转储。我在VS 2017中获取空格。再次检查。@Barmak Shemirani事实上,我已经打电话给我的两个朋友,他们有VS 2017来测试这个,一个程序崩溃了,另一个也有空白。我总是得到“a”,我已经在不同的日子检查过很多次了,否则我不会这么问。也许这是我的环境造成的问题?