我是c编程语言的初学者,在这几天里,我正在训练以进行一些c练习
我陷入了某些转换的练习中:
所以这就是我所做的

#include <stdio.h>

#include <string.h>

int main() {

    int num[8] = {
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7
    };
    long long binary, octal, tempoctal;
    int last, i, A, tempi;
    char hex[9] = {
        '000',
        '001',
        '010',
        '011',
        '100',
        '101',
        '110',
        '111'
    };
    int bex[10];
    A = 0;

    printf("enter an octal number:  ");
    scanf("%lld", & octal);

    tempoctal = octal;

    while (tempoctal != 0) {
        last = tempoctal % 10;

        for (i = 0; i < 8; i++) {
            if (num[i] == last) {
                tempi = i;
                bex[A] = tempi;

            }
        }

        A++;
        tempoctal /= 10;
    }

    printf("\nthe is %s", bex);

    return 0;
}



所以我只想知道为什么当我想打印bex数组时
我在consol enter image description here上遇到错误。
虽然我知道解决方案,但我想以自己的方式做到这一点。

最佳答案

回答你的问题。 bex声明为int bex[10],整数数组。 printf("%s"...需要一个字符串,而不是int数组。


字符串通常是chars char bex[10]的数组。 Char是一个字节,一个int通常为4字节长。所以,您看到那里的区别。在您的示例中,您修改了“ int”的最低字节,其他3保留为“ 0”。
可打印字符具有相应的代码。例如,字符“ 0”具有asccii编码的48代码。所有其他代表数字的字符都有连续的代码(48..57)。这样,如果printf和其他服务在字节中看到48,便知道如何打印。
'c'中的字符串以流浪0结尾,因此printf知道从何处停止读取字符。


因此,如果要将“ bex”打印为字符串,则需要将其创建为字符串。例如

char bex[10];

 for (i=0; i <8; i++)
     bex[A++] = '0' + i; // code of '0' + a number
 bex[A] = 0; // string terminator


只需确保您的“ A”始终小于“ 8”即可避免数组溢出(字符串长度为9加上终止符一个字符。现在您可以执行此操作。

 printf("%s", bex);


您必须处理程序的其余部分,因为在当前状态下它不会做任何有用的事情,但这应该可以帮助您继续。

关于c - 将八进制转换为二进制数字系统的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58035891/

10-11 18:31