【问题标题】:How to assign array values to another arrays in C? [duplicate]如何将数组值分配给C中的另一个数组? [复制]
【发布时间】:2018-07-14 14:01:27
【问题描述】:

我的代码是:

char array[5];
array[0] = 'F';
array[1] = '5';
array[2] = ' ';
array[3] = 'D';
array[4] = '3';

printf("%s", array);

printf("\n");

char aa[2][2];
char aaa[2];

aa[0][0] = array[0];
aa[0][1] = array[1];
aa[1][0] = array[3];
aa[1][1] = array[4];

aaa[0] = array[0];
aaa[1] = array[1];

printf("aa[0] %s\n", aa[0]);
printf("aa[0][0] %c\n", aa[0][0]);
printf("aa[0][1] %c\n", aa[0][1]);

printf("aa[1] %s\n", aa[1]);
printf("aa[1][0] %c\n", aa[1][0]);
printf("aa[1][1] %c\n", aa[1][1]);
printf("aaa %s", aaa);

输出是:

F5 D3▒▒▒▒
aa[0] F5D3F5 D3▒▒▒▒
aa[0][0] F
aa[0][1] 5
aa[1] D3F5 D3▒▒▒▒
aa[1][0] D
aa[1][1] 3
aaa F5F5D3F5 D3▒▒▒▒

请您解释一下,它的作用是什么?为什么这样做?如何修复它,为什么该修复有效而该解决方案无效? (……这个“▒”符号到底是什么?)

谢谢!

【问题讨论】:

  • 您需要在数组的末尾添加一个空终止符'\0' 否则它不知道字符串何时结束并且只打印该内存位置中的任何内容
  • cmets 部分有两个答案。为什么?

标签: c arrays printing char


【解决方案1】:

你的字符串没有被'\0' 字符终止,这就是为什么 pritnf 打印你下一个随机字符

修改代码

char array[5];
array[0] = 'F';
array[1] = '5';
array[2] = ' ';
array[3] = 'D';
array[4] = '3';

char array[6] = "F5 D3\0";

它应该可以工作

【讨论】:

  • 您不需要上面代码中的 \0 。这是多余的,因为 C 字符串文字总是在末尾有一个 \0。
  • 它也不会编译,因为数组维度是错误的。
  • “你的字符串没有被 '\0' 字符终止”是错误的。 “你的字符数组没有被 '\0' 字符终止”会更好。根据定义,string 总是有一个 null 字符,否则它不是字符串。
  • @Galik bstr_t 不是标准 C 的一部分,也不是标准库的一部分,它指定“字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。”
  • @Galik 我指的是 string 的定义,因为 C 使用它,因为这是一个 C 问题。 C 没有将 string 定义为“简单的字符序列” - 它更具限制性。如果问题是关于一般编程的,您的个人定义可能还适用于 C 代码和帖子,使用 C 的定义最有意义。
猜你喜欢
  • 2014-07-14
  • 2020-09-25
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多