问题描述
我想用 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 将它们连接在一行中。