尝试从字符串中删除特定字符

时间:2011-10-02 17:28:36

标签: c string function character

我正在尝试编写一个快速函数来删除下划线字符

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 个答案:

答案 0 :(得分:2)

在写入空字符以终止字符串之前,您正在递增索引变量j。尝试:

removeUnderscore[j] = '\0';

代替。

你还说最后应该有一个换行符,但你从来没有在输出字符串中写过换行符。

答案 1 :(得分:0)

它超越了removeUnderscore的大小。最后一行实际上是设置9而不是索引8.

答案 2 :(得分:0)

removeUnderscore[j++] = yytext[i];
...
removeUnderscore[++j] = '\0';

++j中,j在使用前递增,在j++中j在使用后递增。