Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
6 / 6 / 0
Регистрация: 18.10.2017
Сообщений: 51
1

Мусор при выводе массива

12.07.2018, 16:31. Показов 1450. Ответов 2

Author24 — интернет-сервис помощи студентам
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <string.h>     // strcat
#include <stdio.h>      // printf
#include <ctype.h>      // isdigit
 
//270Ã
char* get_string(char* str, int a);
 
int main()
{
    int l;
    char str[256];
    fgets(str, sizeof str, stdin);
    char* res = get_string(str, strlen(str));
    if (res)
    {
        printf("res=%s", res);
        free(res);
    }
    else
    {
        printf("Error. Spacebar can't be first digit.");
    }
    return 0;
}
 
char* get_string(char* str, int a)
{
    if (str[0] == ' ') //
    {
        return NULL;
    }
 
    int i = 0, count = 0, bool = 0;
    unsigned index = 0;
    char* result = malloc(a); //
 
 
    for (int i=0; i <= a; i++)
    {
        if (i!=0 && str[i] == ' ')
            break;
        else if (str[i] == '.')
            {
                bool = 1;
                result[index] = str[i];
                index += 1;
            }
        else if (isdigit(str[i]))
            {
                if (bool == 1)
                    {
                      count += 1;
                    if (count < 3)
                        {
                            result[index] = str[i];
                            index += 1;
                        }
                    }
 
                else
                    {
                        result[index] = str[i];
                        index += 1;
                    }
            }
        else
            {
                bool = 0;
                count = 0;
                result[index] = str[i];
                index += 1;
            }
 
    }
    str[a] = '\0';
    return result;
}
Этот код иногда вместе с тем, что от него требуется, выводит мусор, просто случайно.

ограничитель в виде '\0' вроде как стоит. Там ли он стоит? А если нет, то куда его поставить? Исправьте меня, чтобы мусор больше не появлялся, я вас очень прошу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2018, 16:31
Ответы с готовыми решениями:

Инициализация массива - на выводе появляется мусор
Здравствуйте, Только начал изучение С, столкнулся со следующим вопросом. Вроде инициализировал...

Невнятый мусор при выводе
Задача из k&amp;r по преобразованию a-z в abc..xyz, также с цифрами, строчными и возможность...

При выводе массива на консоль выводятся также и большое отрицательное число
Задание: Преобразовать массив целых чисел Х по следующему правилу: элементы массива Х циклически...

После сортировки массива в нулевом элементе - мусор
int tmp; for (int i = 0; i &lt; ke_out; i++) { for (int j = 0; j &lt; ke_out; j++) { if...

2
0 / 0 / 0
Регистрация: 26.02.2018
Сообщений: 9
12.07.2018, 17:31 2
/0 символ стоит в конце строки. Проверь, может у тебя выход за пределы выделенной памяти. Плюс
C++
1
malloc
возвращает тип
C++
1
void*
нужно всегда приводить к нужному типу, попробуй
C++
1
char* result = (char*)malloc
И старайся выделять и освобождать память в одном месте! Если выделил в функции get_str там и удаляй. Или выделяй в main а указатель на память передай как аргумент функции, а после так же в main и удаляй.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
12.07.2018, 18:02 3
Цитата Сообщение от SamJa Посмотреть сообщение
char* res = get_string(str, strlen(str));
Цитата Сообщение от SamJa Посмотреть сообщение
char* result = malloc(a); //
strlen возвращает размер строки, без учета терминального 0
например
C
1
char str="123";
strlen выдаст 3
значит память нужно выделять,как минимум, на 1 больше
C
1
char* result =(char*) malloc(a+1);
Добавлено через 2 минуты
Цитата Сообщение от SamJa Посмотреть сообщение
for (int i=0; i <= a; i++)
вот еще выход за пределы
Цитата Сообщение от SamJa Посмотреть сообщение
bool
негоже переменные обзывать как типы, универсальные компиляторы(Си\С++) могут этого не понять
0
12.07.2018, 18:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2018, 18:02
Помогаю со студенческими работами здесь

Мусор в массиве при отладке?
Как туда попал мусор? или это баг отладчика?

Мусор при инициализации структуры
Доброго времени суток. Я отказываюсь понимать, какого черта структура не инициализируется. Код:...

Выводит мусор при отображении цифр по указателю
Здравствуйте, нужно срочно помочь, ввожу программу а вместе цифр выдает &quot;мусор&quot;, как исправить...

При загрузке данных из файла выводится мусор
Здравтсвуйте помогите разобраться. написал игру где можно сохранить результат имя и акаунт. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru