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)
可能会给出指针的大小 4
或 8
,因此您不能将其用于此目的。
在调用 malloc
之后,您应该立即检查它的 return 值,错误时它 returns NULL
,如果值不是 NULL
那么它指向未初始化的内容。
要获取字符串的长度,您需要 strlen
函数,但如果内容未初始化,则将是未定义的行为。
您需要在用数据填充缓冲区后使用 strlen
,数据以 '[=18=]'
字节终止,该字节标记字符串的结尾,如果您还没有初始化数据。
在这种情况下 sizeof
是在编译时评估的,它不关心分配块的大小。
表达式returns指针大小,硬件平台固定
遗憾的是,无法找到 malloc
返回的已分配大小。如果您想知道已分配块的大小,则需要将大小存储在单独的变量中。
为什么下面分配的字符串(即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)
可能会给出指针的大小 4
或 8
,因此您不能将其用于此目的。
在调用 malloc
之后,您应该立即检查它的 return 值,错误时它 returns NULL
,如果值不是 NULL
那么它指向未初始化的内容。
要获取字符串的长度,您需要 strlen
函数,但如果内容未初始化,则将是未定义的行为。
您需要在用数据填充缓冲区后使用 strlen
,数据以 '[=18=]'
字节终止,该字节标记字符串的结尾,如果您还没有初始化数据。
在这种情况下 sizeof
是在编译时评估的,它不关心分配块的大小。
表达式returns指针大小,硬件平台固定
遗憾的是,无法找到 malloc
返回的已分配大小。如果您想知道已分配块的大小,则需要将大小存储在单独的变量中。