微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 指针数组不适用于 memcpy

如何解决C 指针数组不适用于 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;
}

解决方法

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),strlen(var2)+1);,尽管这实际上是 strcpy(f_add,var2) 的作用。

,

指针数组只保存字符串文字的地址(引用)。而且你的代码完全没有意义。

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],strlen(var2)+1);

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

C 或多或少是一种低级语言,因此您必须自己操作内存。

例如:

var output = [];

for (var i = 0; i < input.length; i++) {
    output = output.concat(input[i].toString(2).split(""));
}

return output;

strdup 是一个 C 函数,用于自动分配给定字符串大小的指针。 然后将字符串复制到指针中。

一旦它们都被 malloced(或至少是 var1),您可以使用 memcpy 将它们连接在一行中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。