#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void catTo(char *dest, const char *str1, const char *str2)
{
dest = (char *) malloc(1 + strlen(str1)+ strlen(str2) );
strcpy(dest, str1);
strcat(dest, str2);
}
int main(int argc, char** argv) {
char *str1 = "abcd";
char *str2 = "defg";
char *dest;
catTo(dest, str1, str2);
printf("%s",dest);
return 0;
}
我一直试图让一个简单的str复制功能起作用,但是,当我打印出dest时,我得到&#34;(null)&#34;。我试过,把某些变量放在&amp; / *前面,但没有占上风。
答案 0 :(得分:4)
不要将dest
作为输入参数传递。它的起始值不是必需的(并且未定义),并且不会被catTo
函数调用修改,这可以解释您的问题。
最好这样做:
char *catTo(const char *str1, const char *str2)
{
char *dest = malloc(1 + strlen(str1)+ strlen(str2) );
strcpy(dest, str1);
strcat(dest, str2);
return dest;
}
并且在来电者中:
char *dest = catTo(str1, str2);
答案 1 :(得分:4)
我试过,把某些变量放在&amp; / *前面,但没有取得胜利。
这是一种解决问题的可怕方法 - 你应该检查你对指针和值语义的知识,而不是随意在你的代码中添加运算符。
无论如何,问题在于您将dest
作为char*
传递,然后在dest
内分配到catTo
:因为您正在复制dest
,您要分配给本地参数,而不是dest
中的main
实例。
您可以将dest
作为char**
:
void catTo(char **dest, const char *str1, const char *str2)
{
*dest = malloc(1 + strlen(str1)+ strlen(str2) );
strcpy(*dest, str1);
strcat(*dest, str2);
}
int main(int argc, char** argv) {
char *str1 = "abcd";
char *str2 = "defg";
char *dest;
catTo(&dest, str1, str2);
printf("%s",dest);
return 0;
}
此外,每个malloc
都应与相应的free
匹配。在free(dest)
完成相关操作后,请勿忘记致电main
:
int main(int argc, char** argv) {
char *str1 = "abcd";
char *str2 = "defg";
char *dest;
catTo(&dest, str1, str2);
printf("%s",dest);
free(dest);
return 0;
}