簡體   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