Невнятый мусор при выводе - C (СИ)
Формулировка задачи:
Задача из k&r по преобразованию a-z в abc..xyz, также с цифрами, строчными и возможность обрабатывать вариации ввода типа a-b-c0-9. Написал функцию expand, однако при выводе массива символов вместе с адекватным выводом, выводится и мусор. Прошу вас помочь и объяснить откуда берется этот мусор. Компилировал на gcc 5.4.0 ubuntu. Спасибо
#include <stdio.h>
void expand(char array[]) {
unsigned short i, j, k;
char stepComplete = 0;
char start, end, type;
char result[100];
j = 0; k = 0;
for (i = 0; array[i] != '\0'; i++) {
if (stepComplete == 0) {
if (array[i] >= 'A' && array[i] <= 'Z') {
start = array[i];
stepComplete = 1;
}
else if (array[i] >= 'a' && array[i] <= 'z') {
start = array[i];
stepComplete = 1;
}
else if (array[i] >= '0' && array[i] <= '9') {
start = array[i];
stepComplete = 1;
}
else {
result[++j] = array[i];
}
}
else if (stepComplete == 1 && array[i] != '-') {
stepComplete = 0;
result[++j] = array[i];
}
else if (stepComplete == 1 && array[i] == '-') {
stepComplete = 2;
}
else if (stepComplete == 2) {
if (array[i + 1] == '-') {
stepComplete = 1;
}
else {
end = array[i];
for (k = 0; k <= (end - start); k++) {
result[++j] = start + k;
}
stepComplete = 0;
}
}
}
printf("\n");
printf("%d %c %c ", stepComplete, start, end);
for(i = 0; result[i] != '\0'; i++) {
printf("%c", result[i]);
}
printf("\n");
return;
}
void main(void) {
char array[100], c;
unsigned short i;
for (i = 0; (c = getchar()) != EOF; i++) {
array[i] = c;
}
expand(array);
return;
}Решение задачи: «Невнятый мусор при выводе»
textual
Листинг программы
array[i] = '\0';
Объяснение кода листинга программы
В данном коде выполняется неявное преобразование типа данных из одного в другой.
В данном случае переменная i содержит индекс элемента массива array, который инициализируется значением '\0'.
Следует отметить, что в большинстве случаев такой код используется для присвоения значений по умолчанию (в данном случае значению '\0') элементам массива.