【发布时间】:2017-01-27 00:52:14
【问题描述】:
所以我正在学习嵌入式系统课程,我们正在使用 C。 这是第 2 周,所以我们只是在刷新我们的 C 代码内存。
这段代码是如何打印出数字 6 的?幕后发生了什么?
int main (void) {
char msg[] = "288_882_288";
int my_length = 0xFFFFFFFF;
my_length = strlen(msg+strlen(msg) /2);
printf("%d",my_length);//prints 6
fflush(stdout);
}
谢谢!
【问题讨论】:
-
除法不是优先于加法吗?
-
int my_length = 0xFFFFFFFF;只是无用的代码,因为您会立即在下一行将0xFFFFFFF替换为不同的值,顺便说一句。 -
@KenWhite:没用,但我认为 OP 想确保获得不同的价值。当然,尽管该值可能会溢出
int,并且编译器可能会完全消除初始化。 -
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
-
@Olaf:即便如此,这也是一个浪费的操作。当它立即被以下赋值替换时,它绝对没有任何作用。这是一个无用的任务。它表现出与
int my_length;没有不同的行为,是吗?就算溢出来了?
标签: c arrays string pointers strlen