#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
andchar 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 увеличивается после использования.