【发布时间】:2017-08-27 01:07:50
【问题描述】:
int main() {
char a = 'b';
char* c = &a;
*c = 'a';
*(c+1) = 'j';
*(c+2) = '\0';
printf("%s\n", (char*)&a);
}
它会打印字符“a”和“j”,但随后会打印垃圾,似乎忽略了空终止字符。
为什么?
【问题讨论】:
-
您认为地址
c+1和c+2是什么?更相关的是,为什么您认为写信到这些位置是安全的? -
未定义的行为 - 你没有为
c[1]或c[2]分配空间(你用晦涩的*(c+1)和*(c+2)表示法编写)。 -
这是因为我正在检查具有非常相似逻辑的反编译代码,但它没有分配缓冲区......我应该进一步调查。现在我知道这应该会爆炸,因为它没有先前分配的大小。我应该复习我的 C 知识。