Приведение указателей к целым числам

У меня есть число xmlChar * в моем исходном файле, и мне нужно, чтобы они были в целочисленной форме.

Как правильно их бросить?

Когда я попробовал это world->representation = malloc(sizeof(int *) * mapHeight);, он говорит

error: invalid operands to binary * (have ‘long unsigned int’ and ‘xmlChar *’)

и когда я попробовал это

world->representation = malloc(sizeof(int *) * (int) mapHeight);

я получил эту ошибку

Неопределенные символы для архитектуры x86_64: "_main", ссылка из: start в crt1.10.6.o "_commandfetcher", ссылка из: _commandFetcher в ccPv5Pvd.o ld: символы не найдены для архитектуры x86_64

Как я могу привести указатель xmlChar к int? например, xmlChar имеет значение 30, мне нужно это в форме int.


person some_id    schedule 15.04.2011    source источник
comment
mapHeight указывает на строку, содержащую 30 — это не то же самое, что иметь значение 30. Вам нужно будет использовать atoi/strtol для преобразования, это не приведение   -  person Erik    schedule 15.04.2011


Ответы (2)


Вы не можете просто преобразовать char в int. (Вернее, вы можете, но это не то, что вы думаете.)

Используйте strtol для преобразования строки в целое число:

char* number = "30";
int value = strtol(number, NULL, 0);
person JSBձոգչ    schedule 15.04.2011
comment
Это должно быть long int, а не int. В чем разница между strtol() и atol()? - person BlueRaja - Danny Pflughoeft; 15.04.2011
comment
strtol позволяет вам указать, какую базу вы используете, может анализировать шестнадцатеричный код и, при необходимости, даст вам указатель на конец анализируемой строки. См. документы. - person JSBձոգչ; 15.04.2011

Вы не хотите бросать указатель - вы хотите его разыменовать.

Но в этом случае вы, вероятно, хотите преобразовать строку в целое число?

person Douglas Leeder    schedule 15.04.2011