【发布时间】:2014-03-08 17:38:20
【问题描述】:
一个例子说一千多个单词:
unsigned char *hello = (unsigned char*)malloc(STR_LEN * sizeof(unsigned char));
const char *str= "haha";
memcpy(hello, str, strlen(str) + 1);
如何打印整个hello-variable 的内容(printf("%s",..) 只会尊重\0-终止之前的部分,而不是所有STR_LEN 字符)。
【问题讨论】:
-
这样做是未定义的行为,因为内存没有初始化。
-
我知道...在正常情况下,这没有任何意义。但是我要比较一些ASM操作,想比较
\0后面的位。 -
知不知道,它仍然是UB。
-
@WhozCraig - 我猜调试器一定会左右崩溃,不是吗?事实上,UB 是一个理论概念,在实际系统中,结果受到合理限制。
-
这里更有趣的问题可能是,如果想要比较“后面的位”,那么人们可能不想将字节打印为 ASCII 字符,而是打印出它们的某些值方便的形式,例如十六进制。
标签: c variables printf null-terminated