我用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);
}

08-16 23:08