char*从C中的函数返回(null)
我试图从函数中附加两个char*从C中的函数返回(null),c,null,C,Null,我试图从函数中附加两个常量char*,但它返回(null)。我现在该怎么办?我正在使用GCC编译器v9.3.0在Ubuntu20.04的VS代码中工作。 代码 #include <string.h> #include <stdio.h> char *JoinChars(const char *a, const char *b) { char buffer[strlen(a) + strlen(b) + 1]; strcpy(buffer, a);
常量char*
,但它返回(null)
。我现在该怎么办?我正在使用GCC编译器v9.3.0在Ubuntu20.04的VS代码中工作。
代码
#include <string.h>
#include <stdio.h>
char *JoinChars(const char *a, const char *b)
{
char buffer[strlen(a) + strlen(b) + 1];
strcpy(buffer, a);
strcat(buffer, b);
return buffer;
}
int main()
{
const char *b1 = "Hello\t";
const char *b2 = "World\n";
printf("%s", JoinChars(b1, b2));
return 0;
}
#包括
#包括
字符*JoinChars(常量字符*a,常量字符*b)
{
字符缓冲区[strlen(a)+strlen(b)+1];
strcpy(缓冲区,a);
strcat(缓冲器,b);
返回缓冲区;
}
int main()
{
const char*b1=“Hello\t”;
const char*b2=“World\n”;
printf(“%s”,JoinChars(b1,b2));
返回0;
}
您不能返回指向局部变量的指针,因为函数返回时变量停止存在。这是未定义的行为。一些编译器在检测到它时会发出警告并将返回值设置为NULL
您需要为连接的字符串分配内存
char *JoinChars(const char *a, const char *b)
{
char *buff = NULL;
size_t str1len, str2len;
if(a && b)
{
str1len = strlen(a);
str2len = strlen(b);
buff = malloc(str1len + str2len + 1);
if(buff)
{
strcpy(buff, a);
strcpy(buff + str1len, b);
}
}
return buff;
}
(不带字符串库函数)
或调用方应提供足够大的缓冲区,以容纳两个字符串:
char *JoinChars(char *buff, const char *a, const char *b)
{
size_t str1len;
if(buff && a && b)
{
str1len = strlen(a);
strcpy(buff, a);
strcpy(buff + str1len, b);
}
return buff;
}
你不能返回一个本地指针,它超出了作用域。我应该怎么做?使用malloc代替,或者传递一个足够的缓冲区。
char *JoinChars(char *buff, const char *a, const char *b)
{
size_t str1len;
if(buff && a && b)
{
str1len = strlen(a);
strcpy(buff, a);
strcpy(buff + str1len, b);
}
return buff;
}