在C中,我有两个字符数组:

char array1[18] = "abcdefg";
char array2[18];

如何将array1的值复制到array2?我能这么做吗:array2 = array1

推荐答案

您不能直接执行array2 = array1,因为在本例中,您操作的是数组(char *)的地址,而不是它们的内部值(char).

从概念上讲,您要做的是迭代源(array1)的所有字符,并将它们复制到目的地(array2).有几种方法可以做到这一点.例如,您可以编写一个简单的for循环,或者使用memcpy.

也就是说,字符串的推荐方法是使用strncpy.它可以防止常见的错误,例如buffer overflows(如果用户输入的是键盘、网络等,则填写array1尤其危险).就像这样:

// Will copy 18 characters from array1 to array2
strncpy(array2, array1, 18);

正如@Falken教授在 comments 中提到的,strncpy can be evil.确保目标缓冲区足够大,可以容纳源缓冲区(包括字符串末尾的\0).

C++相关问答推荐

如何将一个enum类型类型转换为另一个类型?

自定义应用程序上的日志(log)轮换问题

_泛型控制表达式涉及数组碰撞警告的L值转换错误?

对于C中给定数组中的每个查询,如何正确编码以输出给定索引范围(1到N)中所有数字的总和?

为什么我会收到释放后堆使用错误?

平均程序编译,但结果不好

用C++从外部ELF符号读取值

用C语言计算文本文件中的整数个数

在另一个函数中使用realloc和指针指向指针

C I/O:在Windows控制台上处理键盘输入

处理来自浏览器的HTTP请求

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

C语言中神秘的(我认为)缓冲区溢出

这段代码用于在C中以相反的顺序打印数组,但它不起作用

pthread_create的用法

用于计算位数和的递归C函数

C中的空指针是什么(_N)?

10 个字节对于这个 C 程序返回后跳行的能力有什么意义

如何修复数组数据与列标题未对齐的问题?

C 预处理器中的标记分隔符列表