当我们调用(char*)malloc(sizeof(char))为一个字符串分配内存时,是否初始化了?如何初始化?

When we call (char*)malloc(sizeof(char)) to allocate memory for a string, is it initialized? How to initialize?

char* str = (char*)malloc(100*sizeof(char)); 
strcpy(str, ""); //Does this line initialize str to an empty string?

调用第 1 行后,分配的内存是否包含垃圾?调用 2 号线后呢?

是的,malloc returns 未初始化的内存,是的,您的第二行代码将您的内存初始化为空字符串。

After calling line 1, does the allocated memory contain garbage?

它可以包含任何内容,因为 malloc 根据标准不需要初始化内存,因此在大多数实现中也不应该。它很可能只包含该内存的前一个 "user" 放在那里的任何数据。

What about after calling line 2?

使用该指令,您将 "byte value" 0 的 [=11=] 字符复制到已分配内存的第一个字节。其他一切都没有受到影响。您也可以完成 str[0] = '[=12=]' 甚至 *str = '[=13=]'。所有这些选项都使 str 指向 "empty string"。

另请注意,由于您标记了问题 C 而不是 C++,因此从 malloc 转换 return 值是多余的。

malloc 只是提供一个内存位置并创建一个指向它的指针,returns 那个。初始化不会发生。如果相同的内存之前被其他东西占用,你可能会得到一个垃圾值。