Попытка удалить определенный символ из строки - PullRequest
0 голосов
/ 02 октября 2011

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

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

printf("Before: %s\n", yytext);


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

removeUnderscore[++j] = '\0';

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

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

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

Ответы [ 3 ]

2 голосов
/ 02 октября 2011

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

removeUnderscore[j] = '\0';

.

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

0 голосов
/ 02 октября 2011
removeUnderscore[j++] = yytext[i];
...
removeUnderscore[++j] = '\0';

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

0 голосов
/ 02 октября 2011

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

...