以下代码始终存在段错误:
char *test3 = (char *) malloc(sizeof(char) * 5);
test3 = "asdf";
printf("%s\n", test3);
以下代码不分段:
char *test3 = (char *) malloc(sizeof(char) * 5);
test3[0] = 'a';
test3[1] = 'b';
test3[2] = 'c';
test3[3] = 'd';
test3[4] = '\0';
printf("%s\n", test3);
我猜问题可能是如何将cstring文字分配给动态创建的cstring?
最佳答案
“填充”字符串的正确方法是:
strcpy(test3, "abcd");
但是,我强烈建议您不要使用
malloc
[并且绝对不要使用(char *) malloc(...)
-因为那样可以隐藏一些相当讨厌的错误,它们会跳起来并至少在适当的时候咬住您,因为这些错误的确有这样做的趋势-您之所以这样做,是因为您将C代码编译为C ++代码,这是错误的,并且会教您这样的坏习惯。使用
malloc
分配小字符串会浪费大量空间。您的5个字符串的开销可能为16-32字节,并将四舍五入为8或16个字节。因此,总共可能要使用48个字节来存储5个字节-这是巨大的空间浪费。关于c - 使用malloc在C中正确使用/创建动态cstring?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18115517/