繁体   English   中英

为什么在 c 中打印字符串数组不提供相同的输出?

[英]Why printing Array of String in c not providing same output?

当最后一个字符与数组下一个元素的第一个字符匹配时,给定最后一个字符的输出重复。 是什么原因,应该是什么解决方案?

左边是程序右边是输出

#include <stdio.h>

int main(void) {
  int i ;

  char fact_char[13][2] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};

  for(i = 0; i < 13; i++){
    printf("%s\n", fact_char[i]);
  }

  return 0;
}

输出


I
IVV
V
IXX
X
XLL
L
XCC
C
CDD
D
CMM
M

c 中的字符串以空字符结尾。 为了表示“IV”,您实际上是在内存中存储了 'I'、'V' 和 '\\0'。 当您打印一个两个字符的字符串时, printf 将继续写入,直到它在内存中找到下一个空终止符,它恰好在下一个(单个字符)字符串中。

要解决这个问题,只需制作它

fact_char[13][ 3 ]

您的数组声明不允许为 2 字母字符串的空终止符留出空间。 将其更改为

char fact_char[13][3]

使用%s格式打印没有空终止符的char数组会导致未定义的行为。

printf("%s\\n", fact_char[i]); 期望fact_char[i]是一个string

字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。 C18

fact_char[11]不是字符串,因为它缺少空字符 它只是'C''M'

要么使用fact_char[13][3]更多空间,要么使用宽度限制打印。 以下将在 2 个字符后或直到遇到空字符后停止打印。 fact_char[11]仍然不是字符串,因为它缺少空字符

printf("%.2s\n", fact_c[i]); // limit print width

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM