【问题标题】:Printing unknown characters, not dashes and spaces, in C在 C 中打印未知字符,而不是破折号和空格
【发布时间】:2012-10-31 05:56:14
【问题描述】:

以下是我的代码的相关位:

//helper function that prints "------" lines or "      " lines
void li(char*  a, int len)
{
   int i;
      for (i=0; i<len; i++)
        {
          printf("%c",a);
        }
}

//helper function that prints out bar 
void bar(int length, int height)
{
     int i;
//prints out top line
     li("-", length);

//prints middle lines of spaces and "|"
     for (i=0;i<height-2;i++) {
     printf("\n");
     li(" ", 6);
     printf("|");
     li(" ", length-2);
     printf("|");
}
//prints bottom line
     if (height>=2){
     printf("\n");
     li(" ", 6);
     li("-", length);}
  return ;
}

预期输出:

The: ------------
     |          |
     ------------

实际输出

The: ��������������
     ������|�������������|
     ���������������������

^^那些应该是未知字符。

不管怎样,我已经尝试解决这个问题,但到目前为止还没有成功。发生这种情况的原因是什么?

【问题讨论】:

  • 当它期望 printf 时将 char * 传递给 printf 是未定义的行为,很可能会导致这种情况。
  • printf("%c",*a); 缺少*
  • @Als:应该是a[i],而不是*a

标签: c pointers char


【解决方案1】:

问题在于您对字符和字符串的理解方式。 要解决此问题,您可以更改 li() 的签名。定义应该是这样的

void li(char  a, int len)
{
   int i;
      for (i=0; i<len; i++)
        {
          printf("%c",a);
        }
}

并且在调用函数 li() 时使用 单引号 而不是双引号。 li("-", length); 应该是 li('-', length); 等等。 我进行了更改并运行了您的代码。尽管它没有按您的预期打印字符,但至少没有打印不可打印的字符。 这是代码和输出。

//helper function that prints "------" lines or "      " lines
void li(char  a, int len)
{
   int i;
      for (i=0; i<len; i++)
        {
          printf("%c",a);
        }
}

//helper function that prints out bar 
void bar(int length, int height)
{
     int i;
//prints out top line
     li('-', length);

//prints middle lines of spaces and "|"
     for (i=0;i<height-2;i++) {
     printf("\n");
     li(' ', 6);
     printf("|");
     li(' ', length-2);
     printf("|");
}
//prints bottom line
     if (height>=2){
     printf("\n");
     li(' ', 6);
     li('-', length);}
  return ;
}
main()
{
bar(5,5);
li('G',5);

}

输出:

-----
      |   |
      |   |
      |   |
      -----GGGGG

您可以更改您的代码,使其以您想要的方式打印。 希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您想打印字符本身。将字符传递给它,而不是 char*

      printf("%c", *a);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2019-06-30
      • 2012-12-25
      相关资源
      最近更新 更多