приведение char * к char [] - PullRequest
       27

приведение char * к char []

4 голосов
/ 08 декабря 2011

Пример:

char str[10];

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

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

error: cast specifies array type

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

Ответы [ 5 ]

2 голосов
/ 08 декабря 2011

О, чувак, будь осторожен с этим gets()! Смежный вопрос


Вы не можете назначать массивы (другими словами, используйте их как lvalues).

char *p = "string";
char array[10];
array = p; /* invalid */

Кроме того, вы не используете strtok() правильно. Возвращенный указатель указывает на последующий токен, поэтому вы можете создать отдельный указатель на символ для его хранения.

2 голосов
/ 08 декабря 2011

Вы не должны назначать результат strtok() обратно вашей переменной str. Вместо этого используйте отдельную переменную, например:

char str[10]; 
gets(str); 
char *token = strtok(str, " ");
//use token as needed...
2 голосов
/ 08 декабря 2011

Вы должны присваивать результат strtok в отдельную переменную char *. Вы не можете присвоить его обратно на ул.

1 голос
/ 08 декабря 2011

Вы не можете ничего присвоить массиву.Даже эта упрощенная программа потерпит неудачу:

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, либо найдите другой способ переопределитьнаписать свою программу, чтобы не пытаться присвоить массиву.(Как выглядит окружающий код? Вставленный код на самом деле не имеет смысла ...)

0 голосов
/ 07 июня 2012

Вы можете получить параметр перед вызовом вашей функции:

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
...