2011-10-02 5 views
-1

에서 특정 문자를 제거하려고 밑줄 그러나, 그것은 '최초의 8 개 문자가 올 수와 쓰레기를 추가합니다 인쇄 할 때 내가 제거하는 빠른 함수를 작성하기 위해 노력하고있어 문자열

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) '값을 줄 바꿈 문자 대신 사용합니다.

이유를 설명 할 수 있습니까? 아니면 그렇게 쉬운 방법을 제공할까요?

+0

'#define BUFSIZE 8'및 'char removeUnderscore [BUFSIZE + 1]; 대신 8 및 9를 코드에 하드 코딩 한 이유는 무엇입니까? 또한, 왜 당신은'char yytext [25] = { "string"};'을 사용합니까? 중괄호는 불필요하며 코드의 다른 곳에서 그 이유가없는 한 25는 불필요합니다 (문자열이 25자를 초과하면 잠재적으로 해를 끼칩니다). –

답변

2

문자열을 종료하기 위해 널 문자를 작성하기 전에 색인 변수 j를 증가시킵니다. 시도해보십시오.

removeUnderscore[j] = '\0'; 

대신에보십시오.

끝에는 개행 문자가 있어야하지만 출력 문자열에는 개행 문자를 작성한 적이 없다고 말합니다.

+0

아하 네 말이 맞아. 나는 바보 야. –

0

오버 스테핑 removeUnderscore의 크기입니다. 마지막 라인이 실제로 ++j J에서 9 아닌 인덱스를 제

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

설정되어 사용되기 전에 증분되고, j++ J에서 사용 된 후 증가한다.

관련 문제