Программа на 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] = "";
это будет использовать правильный максимальный размер для вашей строки.
Это может быть из-за этой строки кода:
for (int i = strlen(bin); i > 0; i--) {
bin[i] = bin[i - 1];
}
Попробуйте заменить strlen(bin)
с 63
,
Также может быть хорошей идеей инициализировать ваш массив bin
с 0с.