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)
的作用。
我想用 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;
}
或者您需要为字符串
分配spaceint 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)
的作用。