литье char * в char[]
Пример:
char str[10];
gets(str);
str = (char[10]) strtok(str, " "); // type error here
Так как strtok()
возвращает char *
, я получаю ошибку типа без этого приведения. С его помощью я получаю следующее:
error: cast specifies array type
Как лучше всего исправить этот код?
5 ответов:
О человек, будь осторожен с этим
gets()
! связанный Вопрос
Нельзя присваивать массивам (другими словами, использовать их в качестве значений lvalue).
Кроме того, вы неправильно используетеchar *p = "string"; char array[10]; array = p; /* invalid */
strtok()
. Возвращаемый указатель указывает на следующий маркер, поэтому может потребоваться создать отдельный указатель char для его хранения.
Вы должны присвоить результат strtok отдельной переменной char*. Вы не можете назначить его обратно в str.
Вы не должны присваивать значение
strtok()
обратно вашей переменнойstr
в первую очередь. Вместо этого используйте отдельную переменную, например:char str[10]; gets(str); char *token = strtok(str, " "); //use token as needed...
Массиву ничего нельзя присвоить. Даже эта упрощенная программа потерпит неудачу:
char *foo(void) { } int main(int argc, char *argv[]) { char a[1]; a = foo(); return 0; }
Как и в самом деле:
$ make fail cc fail.c -o fail fail.c: In function ‘main’: fail.c:7:4: error: incompatible types when assigning to type ‘char[1]’ from type ‘char *’ make: *** [fail] Error 1
Либо переопределите
str
какchar *str
, либо придумайте какой-нибудь другой способ переписать вашу программу, чтобы не пытаться назначить массив. (Как выглядит окружающий код? Код, который вы вставили, все равно не имеет смысла...)
Вы можете получить параметр перед вызовом функции:
char mystr[] = "192.168.0.2"; split_ip(myster[]); char * split_ip( char ip_address[]){ unsigned short counter = 0; char *token; token = strtok (ip_address,"."); while (token != '\0') { printf("%s\n",token); token = strtok ('\0', "."); } }// end of function def