如果char是一个字节,那么这是不是未定义的行为

时间:2015-10-10 00:44:55

标签: c char int undefined-behavior

所以一个int是四个字节,我只是不明白C在这种情况下如何知道这个工作

随机函数显示我的意思

char strl[20];
int c, i=0;
puts("Enter a string up to 19 characters");
while((i<20) && (c=getChar())!="\n")
    strl[i++]=c;

1 个答案:

答案 0 :(得分:3)

C不是一种强类型语言,这种隐式转换很常见。

C11 draft standard 6.5.16.1中的这个例子与你的非常相似:

int f(void);
char c;
/* ... */
if ((c = f()) == -1)
       /* ... */
  

函数返回的int值在存入时可能会被截断   char,然后转换回int宽度之前   比较。

所以这个行为定义得很好。

编辑:我意识到上述情况可能不是最佳示例,因为实施将定义从intchar的转换(如果char默认为unsigned }或signed)。但是,它仍然表明这是定义的行为,而不是未定义。