我用malloc()和字符串得到了一个简单的意外结果。
代码:
int main(void) {
char* b64str;
char* binStr = "00000101";
printf("Expected size of allocated structure (b64str): 8\n");
b64str = (char*)malloc((strlen(binStr)+1)*sizeof(char));
printf("Actual size of allocated structure (b64str): %d\n\n", strlen(b64str));
输出:
Expected size of allocated structure (b64str): 8
Actual size of allocated structure (b64str): 0
为什么?
最佳答案
已将空间分配给b64str
,但该空间未初始化。试图在缓冲区上调用strlen
将调用undefined behavior。在您的特定情况下,第一个字节碰巧设置为0,但您不能依赖于该行为。
你看不出分配了多少内存。你需要自己记录下来。
如果要查看分配是否失败,请检查返回的指针是否NULL
。
b64str = (char*)malloc((strlen(binStr)+1)*sizeof(char));
if (b64str == NULL) {
perror("malloc failed");
exit(1);
}