malloc 返回的字符串大小不正确

size of string returned by malloc is not correct

为什么下面分配的字符串(即result)的大小在下面的代码中不正确

#include <stdlib.h>


char *concat(const char *s1, const char *s2)
{
    char *result;

    result = malloc( strlen(s1) + strlen(s2) + 1 );

    printf("%d", sizeof(result)); // <-- ????? ( it should be seven)

    if ( result == NULL ){
        printf("Error: malloc failed in concat\n");
        exit(EXIT_FAILURE);
    }

    strcpy(result, s1);
    strcpy(result, s2);


    return result;
}

int main()
{
    char *p;
    p = concat("abc", "def");

    return 0;
}

编辑: 我正在尝试为新字符串分配足够的大小,但不知何故大小不正确。

sizeof(result) 可能会给出指针的大小 48,因此您不能将其用于此目的。

在调用 malloc 之后,您应该立即检查它的 return 值,错误时它 returns NULL,如果值不是 NULL 那么它指向未初始化的内容。

要获取字符串的长度,您需要 strlen 函数,但如果内容未初始化,则将是未定义的行为。

您需要在用数据填充缓冲区后使用 strlen,数据以 '[=18=]' 字节终止,该字节标记字符串的结尾,如果您还没有初始化数据。

在这种情况下 sizeof 是在编译时评估的,它不关心分配块的大小。

表达式returns指针大小,硬件平台固定

遗憾的是,无法找到 malloc 返回的已分配大小。如果您想知道已分配块的大小,则需要将大小存储在单独的变量中。