[英]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.