我想将 C 中的一个数组复制到另一个数组,然后将它们都打印出来。当我打印出第二个数组时,它打印了两次。是什么导致了重复?
当我调试 (Xcode) 时,一切似乎都很正常,直到 for 循环的最后一次迭代之后,突然,test2 数组等于“testtest”。
#include <stdio.h>
int main()
{
char test1[4];
char test2[4];
test1[0] = 't';
test1[1] = 'e';
test1[2] = 's';
test1[3] = 't';
/* Copy the stuff from test1 into test2 */
for(int j = 0; j<4; j++){
test2[j] = test1[j];
}
printf("test1: %s\n", test1);
printf("test2: %s\n", test2);
printf("end testing");
return 0;
}
我的结果是:
测试1:测试
测试2:测试测试
结束测试
最佳答案
您的代码有未定义的行为。 char
数组不是空终止的。
两次输出是因为没有得到\0
,然后输出相邻的变量值test1
和test2
。
%s
需要一个以 null 结尾的字符数组或字符串。你没有提供。而且似乎char
数组test1
和test2
在内存中是相邻的。因为它不知道在哪里停止,因为它没有得到任何 \0
- 它打印了两个数组内容。然后它以某种方式得到 \0
并停止了。但如果内存附近没有任何 \0
,它将继续打印。您不能或应该对此行为进行回复。
顺便说一下,您可以这样做,但您最好再次使用以 nul 结尾的字符数组。 (让生活更轻松)。
printf("%.*s",4,test1);
printf("%.*s",4,test2);
你可以像这样初始化字符串
char test1[]="test";
然后您可以使用 strcpy
来复制字符串 - 但要确保您的目的地具有适当的大小(还要考虑 nul 终止字符)。
不要使用 gets()
- 而是使用 fgets()
或类似的函数。
关于c - 为什么我的数组打印出副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48124690/