Попытка удалить определенный символ из строки

#c #string #function #character

#c #строка #функция #символ

Вопрос:

Я пытаюсь написать быструю функцию для удаления символов подчеркивания

 char yytext[25] = {"IDEN_T3FY_ER"};
char removeUnderscore[9];
int i, j = 0;

printf("Before: %sn", yytext);


for (i = 0; i < strlen(yytext); i  ){
    if (j == 8)
        break;
    if (yytext[i] != '_')
        removeUnderscore[j  ] = yytext[i];
}

removeUnderscore[  j] = '';

printf("nAfter: %s", removeUnderscore);
  

Однако при печати будут исправлены первые 8 символов и добавлено мусорное значение «8» в конце вместо символа новой строки.

Кто-нибудь может объяснить, почему? Или, возможно, предложить более простой способ сделать это?

Комментарии:

1. Почему в вашем коде жестко заданы 8 и 9 вместо #define BUFSIZE 8 and char removeUnderscore[BUFSIZE 1]; ? Кроме того, почему вы используете char yytext[25] = {"string"}; ? Фигурные скобки не нужны, и, если у вас нет причины для этого в другом месте вашего кода, 25 также не нужны (и потенциально вредны, если ваша строка изменится на длиннее 25 символов).

Ответ №1:

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

 removeUnderscore[j] = '';
  

вместо этого.

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

Ответ №2:

это превышает размер removeUnderscore . эта последняя строка фактически устанавливает 9, а не индекс 8.

Ответ №3:

 removeUnderscore[j  ] = yytext[i];
...
removeUnderscore[  j] = '';
  

In j j увеличивается до использования, а in j j увеличивается после использования.