当前位置:  开发笔记 > 编程语言 > 正文

我的角色数组正在C中合并

如何解决《我的角色数组正在C中合并》经验,为你挑选了3个好方法。

出于某种原因,我的第二个字符数组(var2)与第一个字符数组(var1)合并.这是我的代码:

#include 
#include 
#include 

int main()     
{
  char var1[5] = "Hello";
  char var2[5] = "World";

  printf("This program can write:\t%s\t%s\n", var1, var2);
  getch();
  return 0;
}

在编译之后,我得到了以下打印:

这个程序可以写:Hello WorldHello

当我更改代码时,printf("This program can write:\t%s\n", var2);我得到以下打印:

这个程序可以写:WorldHello

所以很明显var1正在与var2合并.

这是某种编译错误吗?如果是这样,我该如何解决?我尝试重新安装MINGW,但我仍然得到相同的结果.

非常感谢



1> Mxsky..:

字符串实际上是由空字符'\ 0'终止的一维字符数组.因此,以null结尾的字符串包含组成字符串后跟null的字符.

以下声明和初始化创建一个由单词"Hello"组成的字符串.要将空字符保存在数组的末尾,包含该字符串的字符数组的大小比单词"Hello"中的字符数大1.

char var1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

你可以更简单地做:

#include 
#include 
#include 

int main()     
{

 char var1[] = "Hello";
 char var2[] = "World";

 printf("This program can write:\t%s\t%s\n", var1, var2);
 getchar();
 return 0;

}

C编译器在初始化数组时自动将其'\0'放在字符串的末尾(如果数组足够长以包含它'\0',否则'\0'将丢弃而不是覆盖另一个变量).


只回答包含`[]`,我很欣赏(但我不能说我是如何表达欣赏的).
哦,是的,我完全忘记了'\ 0'.自从我上次编程以来已经好几年了.非常感谢.

2> Netwave..:

你忘了包含\0告诉字符串结尾的de ,所以更新你的数组大小加上一个就可以了:

#include 
#include 
#include 

int main()     
{
  char var1[6] = "Hello";
  char var2[6] = "World";

  printf("This program can write:\t%s\t%s\n", var1, var2);
  getchar();
  return 0;
}

这打印:

这个程序可以写:Hello World


指定数组大小的唯一原因是为了避免在结尾处获得`\ 0`,或者如果你想指定一个比字符串更大的缓冲区(尽管因为你不能在没有实现的情况下写入那个额外的空间)定义的行为也不是很好).但在这种情况下,这只是一个特别糟糕的主意.

3> haccks..:

当使用%s格式说明符时printf,它从内存中读取字符并在找到'\0'字符时停止.如果它没有找到该'\0'字符,则读取,直到它'\0'在内存中找到某个字符.

在上面的代码中两者的var1var2是长度的字符数组5.由于您使用的%s是格式说明符,因此需要使用它来终止它们'\0'.这可以通过增加数组的大小来完成.这将'\0'默认附加一个字符

char var1[6] = "Hello";
char var2[6] = "World";   

见之间的差别char var1[5] = "Hello";char var1[6] = "Hello";

+--------+--------+--------+--------+--------+
|        |        |        |        |        |  
|  'H'   |  'e'   |  'l'   |   'l'  |  'o'   |  char var1[5] = "Hello";
|        |        |        |        |        | 
+--------+--------+--------+--------+--------+





+--------+--------+--------+--------+--------+--------+
|        |        |        |        |        |        |
|  'H'   |  'e'   |  'l'   |   'l'  |  'o'   |   '\0' |  char var1[6] = "Hello";
|        |        |        |        |        |        |
+--------+--------+--------+--------+--------+--------+

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有