繁体   English   中英

C - strcpy 是否有任何特殊属性?

[英]C - Does strcpy have any special properties to it?

每次我尝试在程序中将字符串插入二叉树时,我都必须使用strcpy并使用strcpy的目标才能成功插入。 如果我不使用strcpy而只使用源代码,它会使程序崩溃。

例子:

char *originalstring;
originalstring = (char *)calloc(alloc + 1, sizeof(char));
originalstring = "Hello.";
insert(&root, originalstring); //into binary tree

结果导致崩溃。

char *newstring, *originalstring;

originalstring = (char *)calloc(alloc + 1, sizeof(char));
originalstring = "Hello.";

newstring = (char *)calloc(alloc + 1, sizeof(char));
strcpy(newstring, originalstring);

insert(&root, newstring);

将其插入到树中。 我的完整程序当然比这大得多,但我真的认为这与我被迫使用strcpy插入字符串没有任何关系。 这让我strcpy是否有特殊的东西。

编辑:我也试图手动nullbyte结束originalstring和失败。

当你这样做时:

originalstring = (char *)calloc(alloc + 1, sizeof(char));
originalstring = "Hello.";

您首先为字符串分配一些存储空间,这很好,但是在第二行中,您将使用指向字符串文字的指针替换指向该存储空间的指针。 原始分配随后“丢失”(导致内存泄漏),如果您尝试修改originalString的内容,您将获得未定义的行为,因为您现在指向的是最有可能的只读内存。 如果您随后尝试free此字符串,您还将获得未定义的行为(因为它不是通过malloc分配的)。

所以,最重要的是:始终使用strcpy复制字符串 - 在操作指向字符串的指针时只使用直接赋值 ( = )。


关于编码风格的一些附加说明:

所以上面的分配真的应该写成:

 originalstring = calloc(alloc + 1, 1);

分配字符串文字"Hello." 指向指针 originalstring 导致指针指向该字符串文字,放弃分配的内存。如果您尝试释放此指针或修改字符串文字,这将导致崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM