【发布时间】:2012-10-02 03:50:56
【问题描述】:
我想将char* 分配给char*,如果我使用strcpy,我会遇到几个运行时内存问题,所以我通过使用= operator 的简单分配来解决它。
谁能解释一下在使用strcpy之前应该准备什么以避免内存问题。
编辑:
int Function(const char* K,char* FileIN,char* FileOut,int DC)
{
char *fic_in,*n_fic,*fic_out,*fic_dec;
unsigned char k[17];
fic_in = (char*)malloc(60*sizeof(char));
strcpy((char*)k,K);
//strcpy(fic_in,FileIN); //I remove this one
fic_in=FileIN; //and replace it by this
...
【问题讨论】:
-
由于技术问题,我们暂时无法读懂您的想法。请出示代码。
-
您是否在目标 char* 中预先保留了必要的空间?根据引用 (cplusplus.com/reference/clibrary/cstring/strcpy):“为避免溢出,目标指向的数组的大小应足够长,以包含与源相同的 C 字符串(包括终止空字符),并且不应在内存中与源重叠。”
-
@WhozCraig:是的。顺便说一句,我从来没有说过“strncpy”,我也不建议使用它。这是非常不安全的;-)
-
以防万一,以“安全”方式使用
strncpy:buf[len-1] = 0; strncpy(buf, src, len); if (buf[len] != 0) report_error;为例。它可能比使用strlen检查memcpy后面的长度更有效,但同样它也可能效率较低,尤其是当src明显短于len时。使用strlcpy将是if (strlcpy(dst, src, len) >= len) report_error;,在我看来它开始像“安全”而不是“可以安全使用”的功能。
标签: c++ memory-management char strcpy