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