C - как добавить в конец массива char после reallo c () - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть короткий массив символов, называемый "массив". Я пытаюсь выделить c больше места, затем добавить больше символов в конец. по какой-то причине, когда я печатаю массив, эти дополнительные символы не отображаются, хотя они отображаются, когда я индексирую их по отдельности.

#include <stdio.h>
#include <stdlib.h>
int main(){
    char *array = malloc(2);
    array[0] = 'b';
    array[1] = '\0';
    char stringToAdd[] = "honey";
    array = realloc(array, (16));
    int pos;
//add stringToAdd into array one char at a time
    for (pos = 0; pos < 5; pos++){
        array[2+pos] = stringToAdd[pos];
        printf("%d ", 2+pos);
        printf("%c ", array[2+pos]);
        printf("%s\n", array);
    }
    array[pos] = '\0';
    int k = sizeof(array);
//should print out the string "bhoney" and its length
    printf("%s, length = %d\n", array,k);
    free(array);
    return 0;
}

вывод:

2 h b
3 o b
4 n b
5 e b
6 y b
b, length = 8

также длина массива кажется равной 8, независимо от того, сколько места я пытаюсь переслать c к нему?

Ответы [ 2 ]

4 голосов
/ 15 февраля 2020

Вы добавили символы после нулевого терминатора. Печать строки останавливается на нуле.

Назначьте новые символы для array[1+pos] вместо array[2+pos]. Это также относится к добавлению нового нулевого терминатора после l oop, оно должно быть

array[1+pos] = '\0';

Вы также можете использовать strcat() вместо l oop:

strcat(array, stringToAdd);

Он найдет нулевой терминатор автоматически, поэтому вам не нужно знать смещение, и правильно добавит новый нулевой терминатор.

sizeof(array) - это размер указателя (8 байт), а не длина строки Если вы хотите длину строки, вы должны использовать strlen(array). См разница между sizeof и strlen в c

1 голос
/ 15 февраля 2020

Должно быть:

for (pos = 0; pos < 5; pos++){
    array[1+pos] = stringToAdd[pos];
    printf("%d ", 1+pos);
    printf("%c ", array[1+pos]);
    printf("%s\n", array);
}
array[1+pos] = '\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...