每当我尝试在程序中将字符串插入二叉树时,我必须使用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
的结尾,但失败了。
答案 0 :(得分:2)
执行此操作时:
originalstring = (char *)calloc(alloc + 1, sizeof(char));
originalstring = "Hello.";
您首先为字符串分配一些存储空间,这很好,但是在第二行中,您将使用指向字符串文字的指针替换指向此存储的指针。然后原始分配“丢失”(导致内存泄漏),如果您尝试修改originalString
的内容,您将得到未定义的行为,因为您现在指的是最有可能读取的内容 - 只有记忆。如果您随后尝试free
此字符串(因为它未通过malloc
分配),您也会得到未定义的行为。
所以,底线:始终使用strcpy
来复制字符串 - 在操作指向字符串的指针时只使用直接赋值(=
)。
sizeof(char)
始终等于1
所以上面的分配应该写成:
originalstring = calloc(alloc + 1, 1);
答案 1 :(得分:1)
将字符串文字It is not clear how to separate sentences since there is no punctuation. But suppose we know how to. Then just use Counter from collection.
data = '''
This is a cat
we are working at BusinessBrio
Gitu is my beloved cat
Jery is also a cat
Boni is a nice dog
Gitu is my beloved cat
we are working at BusinessBrio
This is a cat
we are working at BusinessBrio
Gitu is my beloved cat
Jery is also a cat
Boni is a nice dog
Gitu is my beloved cat
we are working at BusinessBrio
'''
li = data.split('\n')
from collections import Counter
pp(Counter(li))
Counter({'we are working at BusinessBrio': 4,
'Gitu is my beloved cat': 4,
'Boni is a nice dog': 2,
'This is a cat': 2,
'Jery is also a cat': 2,
'': 1,
' ': 1})
分配给指针originalstring导致指针指向该字符串文字,放弃分配的内存。如果您尝试释放此指针或修改字符串文字,则会导致崩溃。 / p>