Вопрос по c – ANSI C - очистка строки

2

Я получил строку, объявленную так:

<code>str=malloc(sizeof(char)*128);
</code>

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

Ваш Ответ

3   ответа
4

использованиеmemset:

memset(str, 0, sizeof(char)*128);

Независимо от этого, если вы пишете строку поверх себя, вы не должны использоватьstrcat - объекты, которые вы копируете, не должны перекрываться:

If copying takes place between objects that overlap, the behavior is undefined.

и строка определенно пересекается с собой.

Удаление пробелов из строки может быть легко достигнуто с помощью простой функции:

void remove_space(char* r) {
    char *w = r;
    do { *w = *r++; w += *w && !isspace(*w); } while (*w);
}
как мне позвонитьremove_space функционировать? Я старалсяchar * a = "kk a"; remove_space(a); printf("[%s]\n", a); но возвращаетсяSegment fault.
@Jack Вам нужно сделать строку доступной для записи:char a[] = "kk a"; remove_space(a); printf("[%s]\n", a);
3

calloc вместо простогоmalloc?

Что-то вроде

calloc(128, sizeof(char));

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

И в качествеdasblinkenlight примечания, не копируйте сstrncat, Подумайте об использовании нормальногоdst[i++] = src[j++] способ копирования.

13

Я предлагаю вам просто сделать это:

*str = '\0';

Вам не нужно очищать все содержимое буфера. Вы можете просто установить первыйchar в ноль, и тогда у вас есть пустая строка.

Вы победили меня в этом ответе ... Ему не нужно устанавливатьentire массив до 0, так что это намного быстрее. +1

Похожие вопросы