массив char содержит мусор в конце - PullRequest
0 голосов
/ 08 июня 2018

Итак, я написал следующую функцию на C:

void splitNameAndDate(char *p, char *n, char *d) {
    int d_index = 0, n_index = 0;
    for (int i = 0; i < strlen(p); i++) {
        if(p[i] >= '0' && p[i] <= '9') {
            d[date_index++] = p[i];
        } else {
            n[name_index++] = p[i];
        }
    }
}

Эта функция получает массив (представляющий человека), который выглядит следующим образом: adam1502 (имя и дата) и разбивает его на две частимассивы - имя и дата.Я инициализирую массивы следующим образом:

char date[5],name[50],person[50];

Если, например, массив p имеет Michelle1001, то массив n по некоторым причинам имеет Michelle\023.Не могу понять, почему это ставит \023 конец.Другие тесты работают нормально, хотя.

PS Я использую отладчик Clion, чтобы посмотреть, что содержит массив.

** EDIT - могу ли я использовать следующий код в конце?

date[date_index] = '\0';
name[name_index] = '\0';

1 Ответ

0 голосов
/ 08 июня 2018

Похоже, вы попали в неопределенные значения.

Определение локальной области, например

  char date[5],name[50],person[50];

, оставляет все элементы массива неинициализированными, поэтому значения неопределенными.

Позже вы копируете только соответствующие значения в определенный индекс (за исключением нулевого терминатора), оставшиеся значения остаются неопределенными.Таким образом, вы можете увидеть там произвольное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...