Программа на C случайным образом вставляет случайное имя функции в мой массив

У меня есть следующая программа, которая преобразует десятичную в двоичную:

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

int main() {
    printf("Number (decimal): ");
    int no;
    scanf("%d", &no);

    char bin[64];
    while (no > 0) {
        for (int i = strlen(bin); i > 0; i--) {
            bin[i] = bin[i - 1];
        }

        int bit = no % 2;
        char digit = bit + '0';
        bin[0] = digit;

        no /= 2;
    }

    printf("%s", bin);

    return 0;
}

Программа работает корректно, но в произвольном порядкеttime__vdso_get"добавляется в конце.

Числа, которые делают это, меняются каждый раз, когда я компилирую.

1: 1

2: 01ttime_vsdo_get

3: 10ttime_vsdo_get

Это становится немного другим, когда числа становятся больше:

100039: 11000011011000111ttime__vdso_getm@

+10000000000000000000000000000: ttime


Что происходит?

Если бы мне пришлось диагностировать это, я бы сказал, что мне удалось создать программу компиляции, которая извлекает память из неправильных мест. Хотя я не знаю, как мне это удалось.

Я использую GCC, если это имеет значение.

3 ответа

Решение

Просто делать char bin[64] = "";, никогда не забывайте, что допустимая строка имеет нулевое окончание M@ M@.

А также strlen() вернуть size_t!

Я также могу посоветовать вам использовать char bin[sizeof no * CHAR_BIT + 1] = ""; это будет использовать правильный максимальный размер для вашей строки.

Попробуйте заполнить переменную char bin[64] 0

Это может быть из-за этой строки кода:

for (int i = strlen(bin); i > 0; i--) {
        bin[i] = bin[i - 1];
    }

Попробуйте заменить strlen(bin) с 63,

Также может быть хорошей идеей инициализировать ваш массив bin с 0с.

Другие вопросы по тегам