c - 新手关于malloc和sizeof的问题

标签 c malloc sizeof

有人可以向我解释为什么我对字符串大小为 6 的 malloc 的调用会返回 4 个字节的 sizeof 吗?事实上,我给 malloc 的任何整数参数都会得到 4 的 sizeof。 接下来,我尝试复制两个字符串。为什么我复制的字符串的输出是(NULL)? 以下是我的代码:

int main()
{
    char * str = "string";
    char * copy = malloc(sizeof(str) + 1);
    printf("bytes allocated for copy: %d\n", sizeof(copy));
    while(*str != '\0'){
        *copy = *str;
        str++;
        copy++;
    }
    copy = '\0';
    printf("%s\n", copy);
}

最佳答案

sizeof(str) 返回 char* 类型指针的大小。你应该做的是 malloc 它本身的字符串大小:

char * copy = malloc(strlen(str) + 1);

此外,这些行:

while(*str != '\0'){
        *copy = *str;
        str++;
        copy++;
}
copy = '\0';

可以很容易地用 C 重写,如下所示:

while(*copy++ = *str++);

关于c - 新手关于malloc和sizeof的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46351847/

相关文章:

arrays - 使用sizeof将字符附加到字符串形式用户的末尾

c++ - 指针地址的区别

c - 什么决定最大本地数据报大小? (PF_UNIX/SOCK_DGRAM)

c - for循环中的动态内存分配

c - (第一个 C 程序/Hello World)不断出现语法错误

c - 内存空闲抛出 segFault

c - 无法在函数内分配内存并在 C 中返回它

c++ - QObject 真的有多重?

c - 在 lex 中如何使 yyin 指向具有 yacc 中的主要功能的文件?

c - 球与线相交的参数方程和代数方程之间的区别