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

Min*_*ran 3 c pointers initialization

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

在调用第1行之后,分配的内存是否包含垃圾?在拨打第2行之后怎么办?

Joh*_*ell 5

在调用第1行之后,分配的内存是否包含垃圾?

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

在拨打第2行之后怎么办?

使用该指令,您将\0"字节值"0 的字符复制到分配的内存的第一个字节.其他一切仍然没有动过.你也可以做str[0] = '\0'甚至*str = '\0'.所有这些选项都str指向"空字符串".

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