做以下事情是否安全?
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(void)
{
char* msg;
strcpy(msg, "Hello World!!!"); //<---------
printf("%s\n", msg);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或者应该使用以下内容?
char* msg = (char*)malloc(sizeof(char) * 15);
Run Code Online (Sandbox Code Playgroud)
pm1*_*100 32
strdup为你做malloc和strcpy
char *msg = strdup("hello world");
Run Code Online (Sandbox Code Playgroud)
qbe*_*220 12
您的原始代码不会分配消息.试图strcpy到它会很糟糕.你需要在strcpy进入之前分配一些空间.您可以按照建议使用malloc,也可以像这样在堆栈上分配空间:
char msg[15];
Run Code Online (Sandbox Code Playgroud)
如果你对内存进行malloc,你应该记得在某些时候释放它.如果在堆栈上分配,当内存超出范围时(例如,函数退出),内存将自动返回到堆栈.在这两种情况下,您都需要小心分配足够的能够将最长的字符串复制到其中.您可能需要查看strncpy以避免数组溢出.