对 returns 值超过 127 的 char 执行操作时出现分段错误
Segmentation fault when performing an operation on a char which returns a value that exceeds 127
我使用 gcc 在两台不同的计算机上测试了以下代码:
int main(int argc, char** argv) {
char c1, c2;
c1 = 100;
c2 = 4*c1;
printf("%d", c2);
}
两个测试中的一个抛出分段错误,另一个输出 -112
。为什么会这样?
首先告诉大家,一个计划char
是signed
还是unsigned
,要看执行情况。
就是说,我想您现在已经理解了,尝试将一个值存储到一个可能不适合处理它的类型中,是实现定义的行为。
在大多数实际情况下,存储的值将被视为 2 的补码值(负数),并按此使用,但这不能保证。
我使用 gcc 在两台不同的计算机上测试了以下代码:
int main(int argc, char** argv) {
char c1, c2;
c1 = 100;
c2 = 4*c1;
printf("%d", c2);
}
两个测试中的一个抛出分段错误,另一个输出 -112
。为什么会这样?
首先告诉大家,一个计划char
是signed
还是unsigned
,要看执行情况。
就是说,我想您现在已经理解了,尝试将一个值存储到一个可能不适合处理它的类型中,是实现定义的行为。
在大多数实际情况下,存储的值将被视为 2 的补码值(负数),并按此使用,但这不能保证。