相关疑难解决方法(0)

如果char被签名,"char foo = 255"是否定义了未定义的行为?

在使用Linux的x86机器上使用gcc 4.5.2编译时,以下内容不会给我任何警告:

char foo = 255;
Run Code Online (Sandbox Code Playgroud)

但是当我使用时-pedantic,gcc说:

警告:隐式常量转换溢出

gcc行为的方式有点奇怪,这让我怀疑我是否真的理解这项任务中发生了什么.我认为如果charPOSIX上有8位长并且默认情况下是签名,则无法保持255.

在C标准中,它表示无符号整数溢出导致溢出,但未定义有符号整数溢出.这个赋值是不确定的行为?为什么gcc这样做?

c gcc

39
推荐指数
3
解决办法
1770
查看次数

Putchar和Getchar在C中

我正在阅读K&R的The C Programming Language,并对putchar和getchar感到困惑.我制作了一个程序,你输入10个字符,程序将它们打印回屏幕.

#include <stdio.h>

int main() 
{
    int i;
    int ch;
    for(i = 0; i < 10; i++)
    {
        printf("Enter a single character >> ");
        ch = getchar();
        putchar(ch);
    }

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

我希望得到这样的输出:

Enter a single character >> a
a
Enter a single character >> b
b
Run Code Online (Sandbox Code Playgroud)

...等等10次,但这是我得到的输出:(进入2个字符后我停止了)

Enter a single character >> a
aEnter a single character >>
Enter a single character >> b
bEnter a single character >>
Enter a single character >>
Run Code Online (Sandbox Code Playgroud)

不确定为什么我的输入字符与固定字符串组合并被输出.

另外,我不太清楚为什么使用int来存储字符.

c kernighan-and-ritchie putchar getchar

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×2

gcc ×1

getchar ×1

kernighan-and-ritchie ×1

putchar ×1