【发布时间】:2021-08-28 05:59:33
【问题描述】:
当下面的代码运行时,它给出了某种段错误并且程序崩溃了。 所以最初 temp = "abcdef" 最后 temp3 也应该包含 "abcdef"
My intention is to copy the content of "temp" into
"temp3".Please suggest where I am doing wrong.
void fun (char * input , char **input1) {
size_t size = strlen(input);
*input1 = (char **) malloc(sizeof(char) * (size+1));
memcpy(*input1 , input , size);
}
int main(){
char * temp = "abcdef";
char * temp3;
fun(temp , temp3);
printf("%s",temp3);
return 0;
}
【问题讨论】:
-
打开你的编译器警告......并注意它们!您还需要为终止
'\0'分配strlen + 1 -
这不会编译。至于问题,同样是老无聊的“off by 1没有为空终止符分配空间”的常见问题解答,之前已经回答过无数次了。我懒得找副本了。
-
关闭选民:这不仅仅是一个错字。
-
@ashwinak 设置 -> 编译器 -> 编译器标志选项卡。检查以下内容:“启用所有常见的编译器警告(覆盖许多其他设置)-Wall”、“启用额外的编译器警告 -Wextra”、“将严格的 ISO C 和 ISO C++ -pedantic-errors 要求的警告视为错误”。您可能需要为 -Werror 添加一个自定义项。
-
至于“它只给了我一个警告”请查看What must a C compiler do when it finds an error?
标签: c copy dynamic-memory-allocation c-strings function-definition