这样做安全吗?
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(void)
{
char* msg;
strcpy(msg, "Hello World!!!"); //<---------
printf("%s\n", msg);
return 0;
}或者应该使用以下内容?
char* msg = (char*)malloc(sizeof(char) * 15);发布于 2011-03-19 00:29:21
您的原始代码没有分配msg。试图阻止它将是不好的。你需要在进入它之前分配一些空间。您可以按照您的建议使用malloc,或者像这样在堆栈上分配空间:
char msg[15];如果你对内存进行了恶意锁定,你应该记得在某个时刻释放它。如果你在堆栈上分配内存,当它超出范围时(例如函数退出),内存将自动返回到堆栈。在这两种情况下,您都需要小心分配足够的空间,以便能够将最长的字符串复制到其中。您可能希望查看strncpy以避免数组溢出。
发布于 2011-03-19 00:31:03
strdup会为您执行malloc和strcpy
char *msg = strdup("hello world");发布于 2011-03-19 00:27:36
第一个版本不安全。而且,msg应该指向"Hello World!“的有效内存位置。被复制。
char* msg = (char*)malloc(sizeof(char) * 15);
strcpy(msg, "Hello World!!!");https://stackoverflow.com/questions/5354933
复制相似问题