首页 > 解决方案 > 简单的字符串复制,但 memcpy 不起作用

问题描述

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main()
{
    unsigned char str[] = "abcdefg";
    unsigned char *str1 = (unsigned char*)malloc(sizeof(str) -1);

    memcpy(str1, str, (sizeof(str)-1) );

    for(int i = 0; i<(sizeof(str1)); i++)
        printf("%c", str1[i]);

    free(str1);
}

我想将字符串复制str到,str1但输出是

A B C D

这意味着只复制指针字节(4byte)。

我尝试

printf("%d", sizeof(str)-1 );

它的输出是7

我的错误是什么?

标签: cmallocmemcpy

解决方案


这意味着只复制指针字节(4字节)。

不,不是的。您假设您的打印输出是正确的,但事实并非如此。您可以sizeof在数组上使用,但不能在指针上使用。嗯,你可以,但它意味着不同的东西。

一切都被复制。您只是打印前四个字符。改成:

for(int i = 0; i<(sizeof(str) - 1); i++)

另外,不要强制转换 malloc。原因如下:我要转换 malloc 的结果吗?


推荐阅读