Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
char*从C中的函数返回(null)_C_Null - Fatal编程技术网

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;
}