литье char * в char[]


Пример:

char str[10];

gets(str);
str = (char[10]) strtok(str, " "); // type error here

Так как strtok() возвращает char *, я получаю ошибку типа без этого приведения. С его помощью я получаю следующее:

error: cast specifies array type

Как лучше всего исправить этот код?

5 4

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