【发布时间】:2020-01-24 15:45:16
【问题描述】:
我正在努力编写作为参数传递的 char*。我想从函数 write_char() 向 char* 写入一些字符串。使用下面的代码,我遇到了分段错误。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void write_char(char* c){
c = (char*)malloc(11*(sizeof(char)));
c = "some string";
}
int main(){
char* test_char;
write_char(test_char);
printf("%s", test_char);
return 0;
}
【问题讨论】:
-
c = malloc(...); c = "some string"有点类似于x = 5; x = 7。第二个赋值覆盖第一个。在这种情况下,这会导致内存泄漏。此外,您正在分配一个作用域为函数的变量,因此函数返回时该值会丢失。 -
请注意,
"some string"需要 12 个字符——你没有计算结尾的空值。但是您应该避免将字符串长度硬连接到代码中。超出分配数组的范围写入(如果您将字符串复制到分配的数组,而不是泄漏内存)将是未定义的行为。 -
您可以使用
strdup,这样您就不必担心空值终止您的字符串。
标签: c function reference dynamic-memory-allocation c-strings