Azi*_*med 2 c arrays string character
当最后一个字符与数组下一个元素的第一个字符匹配时,给定最后一个字符的输出重复。是什么原因,应该是什么解决方案?
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出
I
IVV
V
IXX
X
XLL
L
XCC
C
CDD
D
CMM
M
Run Code Online (Sandbox Code Playgroud)
c 中的字符串以空字符结尾。为了表示“IV”,您实际上是在内存中存储了 'I'、'V' 和 '\0'。当您打印一个两个字符的字符串时, printf 将继续写入,直到它在内存中找到下一个空终止符,它恰好在下一个(单个字符)字符串中。
要解决这个问题,只需制作它
fact_char[13][ 3 ]
您的数组声明不允许为 2 字母字符串的空终止符留出空间。将其更改为
char fact_char[13][3]
Run Code Online (Sandbox Code Playgroud)
使用%sformat 打印char没有空终止符的数组会导致未定义的行为。