2015-04-28 3 views
1

Я получаю ввод как argv, argc, и я хочу вернуть TRUE of FALSE в соответствии с вводом. Мой код:Использование указателя в булевом выражении оператора if

int is_valid_regexp(const char* regexp); 
int main(int argc, char *argv[]) 
{ 
    if (!is_valid_regexp(argv[1])){ 
    fprintf(stderr, "wrong regular expression format:%s", argv[1]); 
    return(EXIT_FAILURE): 
    } 
    return (EXIT_SUCCESS); 
} 

int is_valid_regexp(const char* regexp) 
{ 
    do{ 
    if(*regexp == '\\') 
     return FALSE; 
    }while (regexp++ != '\0'); 
    return TRUE; 
} 

Программа выполняет, а затем перестает работать. Я думаю, что что-то не так с if(*regexp == '\\') return FALSE - программа работает хорошо, если я исключаю эту часть. Это имеет какое-то отношение к проблеме указателя?

+4

'} while (* regexp ++! = '\ 0');' – BLUEPIXY

+0

О, я ошибся! спасибо ..... –

+1

@BLUEPIXY Можете ли вы ответить на свой вопрос, увидев, как он решил вопрос? – Toby

ответ

0
}while (regexp++ != '\0'); 

Здесь regexp является указателем, который равен адресу области памяти. regexp++ просто сдвиньте правую на одной позиции этот указатель. Поскольку тип указателя - size_t (unsigned __int32), вы выходите за пределы своей строки. Использование

`}while (*regexp++ != '\0');` 

, чтобы решить вашу проблему.

Смежные вопросы