[英]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
复制字符串 - 在操作指向字符串的指针时只使用直接赋值 ( =
)。
sizeof(char)
总是等于1
,根据定义所以上面的分配真的应该写成:
originalstring = calloc(alloc + 1, 1);
分配字符串文字"Hello."
指向指针 originalstring 导致指针指向该字符串文字,放弃分配的内存。如果您尝试释放此指针或修改字符串文字,这将导致崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.