如果我们有以下代码:
char x = -1;
x =~x;
Run Code Online (Sandbox Code Playgroud)
在带有MS VS编译器的x86平台上(部分支持C99) - 运行时会发生什么?
据我所知,发生以下情况(如果我错了请纠正我):
实际上发生了很多事情 - 我发现它有点令人困惑.特别是:我对最后一次隐式转换(int到char)的理解是否正确?如果赋值的结果无法存储在char中会发生什么?
我尝试在64位Windows PC上使用VS2017(32位版本),在我看来,fscanf()在成功读取文件中的最后一项后立即设置eof标志.在fscanf()读取与流相关的文件中的最后一项后,此循环立即终止:
while(!feof(stream))
{
fscanf(stream,"%s",buffer);
printf("%s",buffer);
}
Run Code Online (Sandbox Code Playgroud)
我知道这是不安全的代码......我只是想了解这种行为.请原谅我 ;-)
这里,stream与包含"Hello World!"等字符串的普通文本文件相关.该文件中的最后一个字符不是换行符.
但是,fgetc()在处理完最后一个字符后,尝试在此循环中读取另一个字符,这导致c = 0xff(EOF):
while (!feof(stream))
{
c = fgetc(stream);
printf("%c", c);
}
Run Code Online (Sandbox Code Playgroud)
fscanf()和fgetc()的这种行为是标准化的,依赖于实现还是其他什么?我不是问为什么循环终止或为什么它不终止.如果这是标准行为,我对这个问题很感兴趣.