Ошибка типа аргумента strcmp - PullRequest
       1

Ошибка типа аргумента strcmp

1 голос
/ 01 августа 2011

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

while ( walker > 0 &&   strcmp(a[walker - 1],space_const) )

Warning 86: argument 1 conflicts with formal definition

Кто-нибудь знает, как решить эту проблему? space_const - это char, инициализированный как " "

char* strTrim(char* string)
{
 char* a= string;

 char delims[3];
 char space_const[] =" ";
 char syntax_const[]=" \t\n\v";
 size_t walker = strlen ( a );
 strcpy(delims,space_const);
 /* Trim trailing spaces */
 while ( walker > 0 &&   strcmp(a[walker - 1],space_const) )
   --walker; 

 a[walker] = '\0';

 /* Trim leading spaces */
 walker = strspn ( a,syntax_const);
 memmove ( a, a + walker, strlen ( a + walker ) + 1 );
 return extractCmd(a ,space_const );
}

Ответы [ 2 ]

6 голосов
/ 01 августа 2011

Вы пытаетесь сравнить символ (маленькое целое) и строку.

char* a= string;
/*... */

strcmp(a[walker - 1], space_const);
         ^ character

strcmp выглядит так

int strcmp(const char *s1, const char *s2);
                  ^ string        ^ string


Скорее всего, вы хотите что-то вроде:

(a[walker - 1] == ' ' || a[walker - 1] == '\t' || ..)

Вы должны написать функцию. но тогда вы бы в итоге переписали isspace.

Почему вы не можете использовать isspace во-первых?

1 голос
/ 01 августа 2011

Добавляя скобки после переменной a [], вы сделали ее символом. Затем вы должны разыменовать его обратно в указатель, используя амперсанд &; Такие как:

while ( walker > 0 &&   strnicmp(&a[walker - 1],space_const, strlen(space_const)) ) 

Будьте очень осторожны, похоже, это можно использовать для переполнения буфера, поскольку переданная строка не проверяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...