C 指针数组不适用于 memcpy

C Pointer array is not working with memcpy

我想用 memcpy 连接两个字符串。但是下一个 memcpy 不工作。我的预期输出是“我的名字是可汗”。

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

int main()
{
    char *var1 = "my name";
    char *var2= "is khan";
    char *f_add[20];
    memcpy(f_add,var1, strlen(var1)+1);
    memcpy(f_add+8,var2, strlen(var2)+1);

    printf("%s", f_add);
    return 0;
}

指针数组仅保存字符串文字的地址(引用)。而且您的代码根本没有意义。

int main(void)
{
    char *var1 = "my name";
    char *var2= "is khan";
    char *f_add[20];

    f_add[0] = var1;
    f_add[1] = var2;
    printf("%s\n%s", f_add[0], f_add[1]);
    return 0;
}

或者您需要为字符串

分配space
int main(void)
{
    char *var1 = "my name";
    char *var2= "is khan";
    char *f_add[20];

    f_add[0] = malloc(strlen(var1) + 1);
    f_add[1] = malloc(strlen(var2) + 1);

    memcpy(f_add[0],var1, strlen(var1)+1);
    memcpy(f_add[1],var2, strlen(var2)+1);

    printf("%s\n%s", f_add[0], f_add[1]);
    return 0;
}

char *f_add[20]; 定义了两个指向 char 的指针的数组。您可能想要一个包含 20 char:

的简单数组
char f_add[20];

然后你需要复制到正确的地方。复制到 f_add+8 在标记第一个字符串结尾的空字节之后开始写入,因为该字符串“my name”有七个非空字符和一个空终止符。所以需要从空字符开始复制:

memcpy(f_add+7, var2, strlen(var2)+1);

您也可以使用 memcpy(f_add + strlen(f_add), var2, strlen(var2)+1);,尽管这实际上是 strcpy(f_add, var2) 的作用。