我有一个连接两个常量char *的函数并返回结果。我想做的是将char加入常量char *例如
char *command = "nest";
char *halloween = join("hallowee", command[0]); //this gives an error
char *join(const char* s1, const char* s2)
{
char* result = malloc(strlen(s1) + strlen(s2) + 1);
if (result)
{
strcpy(result, s1);
strcat(result, s2);
}
return result;
}
答案 0 :(得分:4)
您编写的函数需要两个C字符串(即两个const char *
变量)。这里,你的第二个参数是command[0]
,它不是指针(const char *
),而是一个简单的'n'字符(const char
)。但是,该函数认为您传递的值是一个指针,并尝试在字母'n'的ASCII值给出的内存地址中查找字符串,这会导致问题。
编辑:要使其正常工作,您必须更改join
功能:
char *join(const char* s1, const char c)
{
int len = strlen(s1);
char* result = malloc(len + 2);
if (result)
{
strcpy(result, s1);
result[len] = c; //add the extra character
result[len+1] = '\0'; //terminate the string
}
return result;
}
答案 1 :(得分:2)
如果您想加入单个字符,则必须编写一个单独的函数,该函数将s2
中的字符数量附加到其中。
答案 2 :(得分:1)
最好的方法是创建一个允许向字符串添加单个字符的新函数。
但是如果您出于某种原因想要使用join()
函数,您还可以按以下步骤操作:
char *command = "nest";
char *buffer = " "; // one space and an implicit trailing '\0'
char *halloween;
*buffer = command[0];
halloween = join("hallowee", buffer);