首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“‘strcpy”和“malloc”?

“‘strcpy”和“malloc”?
EN

Stack Overflow用户
提问于 2011-03-19 00:25:41
回答 6查看 44.9K关注 0票数 17

这样做安全吗?

代码语言:javascript
复制
#include <stdio.h>
#include <malloc.h>
#include <string.h>

int main(void)
{
    char* msg;

    strcpy(msg, "Hello World!!!");  //<---------

    printf("%s\n", msg);

    return 0;
}

或者应该使用以下内容?

代码语言:javascript
复制
char* msg = (char*)malloc(sizeof(char) * 15);
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-19 00:29:21

您的原始代码没有分配msg。试图阻止它将是不好的。你需要在进入它之前分配一些空间。您可以按照您的建议使用malloc,或者像这样在堆栈上分配空间:

代码语言:javascript
复制
char msg[15];

如果你对内存进行了恶意锁定,你应该记得在某个时刻释放它。如果你在堆栈上分配内存,当它超出范围时(例如函数退出),内存将自动返回到堆栈。在这两种情况下,您都需要小心分配足够的空间,以便能够将最长的字符串复制到其中。您可能希望查看strncpy以避免数组溢出。

票数 12
EN

Stack Overflow用户

发布于 2011-03-19 00:31:03

strdup会为您执行malloc和strcpy

代码语言:javascript
复制
char *msg = strdup("hello world");
票数 36
EN

Stack Overflow用户

发布于 2011-03-19 00:27:36

第一个版本不安全。而且,msg应该指向"Hello World!“的有效内存位置。被复制。

代码语言:javascript
复制
char* msg = (char*)malloc(sizeof(char) * 15);
strcpy(msg, "Hello World!!!");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5354933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档