我想将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;
}
我的结果是:
test1:test
test2:testtest
结束测试
答案 0 :(得分:1)
您的代码有未定义的行为。 char
数组不会以空值终止。
两次输出因为它没有得到\0
然后输出相邻变量值test1
和test2
。
%s
期望一个空终止的char数组或字符串。你没有提供它。似乎char
数组test1
和test2
在内存中相邻。因为它不知道在哪里停止,因为它没有得到任何\0
- 它打印了两个数组内容。然后它以某种方式得到\0
并且它停止了。但如果内存旁边没有任何\0
,它将继续打印。您无法或应该回复此行为。
你可以这样做,但你最好还是使用nul终止的char数组。 (让生活更轻松。)
printf("%.*s",4,test1);
printf("%.*s",4,test2);
您可以像这样初始化字符串
char test1[]="test";
然后你可以使用strcpy
来复制字符串 - 尽管确保你有适当大小的目的地(同时考虑到nul终止字符)。
不要使用gets()
- 而是使用fgets()
或类似功能。
答案 1 :(得分:1)
C字符串以空值终止。如果你没有在字符串的末尾放置一个空字符(&#39; \ 0&#39;),它实际上将无法正常工作(因为错误)。这样做:
char test1[5]; //****
char test2[5];
test1[0] = 't';
test1[1] = 'e';
test1[2] = 's';
test1[3] = 't';
test1[4] = '\0'; //****
/* Copy the stuff from test1 into test2 */
for(int j = 0; j<4; j++){
test2[j] = test1[j];
}
test2[j] = '\0'; //****
但是你不需要放一个&#39; \ 0&#39;当您从用户那里获取整个字符串输入时,例如:scanf("%s", s)
或gets(s)
,因为它会自动放入。
答案 2 :(得分:0)
尝试使用字符串复制功能
$("#id_form_location").submit(function(event) {
alert('it works');
});