Правильно ли объединить символ в массив символов? - PullRequest
0 голосов
/ 25 января 2019

Я пытался объединить массив символов с одним символом. Я видел некоторые решения, но я видел и это, и я не уверен, что это правильно.

void addCharacter( char* array, const char c )
{
    int asize = strlen( array );
    array[ asize ] = c;
    array[ asize+1 ] = '\0';
}


int main()
{
    char arrayd[13] = "Hello World!";
    printf("%s\n", arrayd);

    addCharacter(arrayd,'1');
    printf("%s\n", arrayd);
    return 0;
}

Он компилируется и выглядит хорошо, но нужно ли так решать или выделять память и создавать новый массив большего размера?

1 Ответ

0 голосов
/ 25 января 2019

Ничего страшного, если array имеет как минимум asize + 1 + 1 байтов.

Если нет, то поведение программы будет неопределенным. В вашем случае поведение равно не определено, поскольку arrayd является 13-байтовым массивом.

Лично я хотел бы, чтобы длина array передавалась в качестве параметра функции, чтобы вы могли проверить в точке использования.

Вы можете встроить в функцию realloc возможности, но тогда вам нужно будет передать array как char**, чтобы вы могли изменить указатель и вам нужно Вы сами рискуете лишиться прав потребителей исходного указателя.

Наконец, передача NUL для c по сути не работает; Я бы имел дело с этим на вашем месте.

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