В C строка представляет собой массив байтов. Вы не можете назначить «пустой байт», но вам придется сдвинуть оставшуюся часть байтов вперед.
Вот один из способов, как это сделать:
char *write = str, *read = str;
do {
// Skip space and tab
if (*read != ' ' && *read != '\t')
*(write++) = *read;
} while (*(read++));
Помните, что символьные строки в C обычно находятся в памяти, защищенной от записи, поэтому вы должны скопировать в кучу, прежде чем вы можете изменить их. Например, это обычно ошибку сегментации:
char *str = "hello world!"; // Literal string
str[0] = 'H'; // Segfault
Вы можете скопировать строку в куче с strdup
(среди прочих):
char *str = strdup("hello world!"); // Copy string to heap
str[0] = 'H'; // Works
EDIT: На Ваш комментарий, вы можете пропустить только начальный пробел, помня тот факт, что вы видели символ без пробелов. Например:
char *write = str, *read = str;
do {
// Skip space and tab if we haven't copied anything yet
if (write != str || (*read != ' ' && *read != '\t')) {
*(write++) = *read;
}
} while (*(read++));
Per OP в ниже, этот вопрос является точной копией http://stackoverflow.com/questions/122616/painless-way- to-trim-leading-trailing-whitespace-in-c –
Наткнулся на это сообщение и не мог не заметить, что «замена ничем» не отличается от удаления. :) – Arjan