繁体   English   中英

奇怪的字符是 output 到终端

[英]strange character is output to the terminal

我是 C/C++ 编程的初学者。 这是我的程序,它在终端中按升序显示二进制数(我正在 Linux Mint 中编译)。

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include <string.h>

void reverse(char *x, int begin, int end)
{
   char c;

   if (begin >= end)
      return;

   c          = *(x+begin);
   *(x+begin) = *(x+end);
   *(x+end)   = c;

   reverse(x, ++begin, --end);
}


int main()
{
    unsigned int bitCount;
    unsigned int naborCount;

    printf("Число битов в наборе: ");
    scanf("%d", &bitCount);
    printf("\n");

    naborCount = pow(2, bitCount);

    char naborStr[bitCount*2];

    for(int i = 0; i<naborCount; i++)
    {
        for(int j = 0; j<bitCount; j++)
        {
            if((i & (1<<j))==0)
            {
                strcat(naborStr, "0 ");
            }
            else
            {
                strcat(naborStr, "1 ");
            }
            if(j == bitCount-1)
            {
                reverse(naborStr, 0, strlen(naborStr)-1);
                printf("%s \r\n", naborStr);
                memset(naborStr, 0, sizeof(naborStr));
            }
                
        }
    }
    
    return 0;
}

这是我在终端看到的

这个符号是从哪里来的? 如何解决?

C 字符串是 null 终止的。

%s 说明符搜索 null 终止。

在您的情况下,它会继续打印,直到找到一个,因此您会得到一些随机符号。

尝试在字符串末尾使用 null 字符并检查。

看看下面的实现:

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include <string.h>

void reverse(char *x, int begin, int end)
{
char c;

if (begin >= end)
    return;

c          = *(x+begin);
*(x+begin) = *(x+end);
*(x+end)   = c;

reverse(x, ++begin, --end);
}


int main()
{
    unsigned int bitCount;
    unsigned int naborCount;

    printf("Число битов в наборе: ");
    scanf("%d", &bitCount);
    printf("\n");

    naborCount = pow(2, bitCount);

    char naborStr[bitCount*2 + 1]; //Increased size by 1 for null character

    for(int i = 0; i<naborCount; i++)
    {
        for(int j = 0; j<bitCount; j++)
        {
            if((i & (1<<j))==0)
            {
                strcat(naborStr, "0 ");
            }
            else
            {
                strcat(naborStr, "1 ");
            }
            if(j == bitCount-1)
            {
                reverse(naborStr, 0, strlen(naborStr)-1);
                naborStr[bitCount*2 +1] = '\0'; //Appending null character
                printf("%s \r\n", naborStr);
                memset(naborStr, 0, sizeof(naborStr));
            }
                
        }
    }
    
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM