2

我想用 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;
}

4

2 回答 2

2

char *f_add[20];定义一个由两个指向 的指针组成的数组char。您可能想要一个简单的 20 数组char

char f_add[20];

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

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

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

于 2021-02-01T11:48:30.233 回答
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;
}

或者您需要为字符串分配空间

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;
}
于 2021-02-01T10:54:43.923 回答