如何在C语言中将字符数组复制到字符指针?

3

我有两个变量如下。如何将“varOrig”的内容复制到“varDest”(不使用循环forwhile)?

const char* varDest = "";
char varOrig[34]     = "12345";

1
你是在问如何将varOrig的基地址赋值给指针变量varDest吗? - WhozCraig
3
你可以将内容复制到指针所指向的内存中,但不能复制到指针本身。在这种情况下,所指向的内存既是只读的,而且太小了。 - Eugene Sh.
你需要为 varDest 分配内存,而不是将其指向 "",然后才能使用 strcpy - Christian Gibbons
1
varDest = strdup(varOrig); 在使用完毕后不要忘记释放内存,因为 strdup 内部使用了 malloc - Nick S
我是这样解决的:varDest = &varOrig[0] 或者 varDest = strdup(varOrig),就像@NickS所说的那样。 - wBB
5
你的问题、方法一和方法二是三个完全不同的东西。 - Eugene Sh.
2个回答

2

如果你想要将数组的地址复制给指针,可以这样做:

Original Answer翻译成"最初的回答"

varDest = varOrig;

否则,你需要分配内存并复制字符串。
使用strdup非常有用:
varDest = strdup(varOrig);

在使用完成后,您需要释放varDest

注:原始答案翻译成“最初的回答”。


2

memcpy是用于内存到内存复制的最快速的库例程。它通常比必须扫描其复制的数据的strcpy或必须采取预防措施来处理重叠输入的memmove更有效率。

注:Original Answer翻译成“最初的回答”并不符合上下文语境,因此未进行翻译。
// Defined in header <string.h>
void* memcpy( void *dest, const void *src, size_t count );

最初的回答。
这段代码。
#include<string.h>
#include<stdlib.h>
...
char varOrig[34] = "12345";
// calculate length of the original string
int length = strlen(varOrig);
// allocate heap memory, length + 1 includes null terminate character
char* varDest = (char*)malloc((length+1) * sizeof(char));
// memcpy, perform copy, length + 1 includes null terminate character
memcpy(varDest, varOrig, length+1);

引用:https://en.cppreference.com/w/c/string/byte/memcpy - FriskySaga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接