【问题标题】:Why printing Array of String in c not providing same output?为什么在 c 中打印字符串数组不提供相同的输出?
【发布时间】:2020-06-06 07:17:05
【问题描述】:

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

#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

【问题讨论】:

  • ,... 或使用 printf("%.2s\n", fact_char[i]); 将打印限制为 2 个字符。

标签: c arrays string character


【解决方案1】:

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

要解决这个问题,就去做吧

fact_char[13][3]

【讨论】:

    【解决方案2】:

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

    char fact_char[13][3]
    

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

    【讨论】:

      【解决方案3】:

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

      string 是一个连续的字符序列,以第一个空字符终止并包括第一个空字符。 C18

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

      使用fact_char[13][3] 允许更多空间或使用宽度限制打印。以下内容将在 2 个字符后或遇到 空字符 之前停止打印。 fact_char[11] 仍然不是 string,因为它缺少 null 字符

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 2020-09-03
        • 1970-01-01
        相关资源
        最近更新 更多