2015-05-09 3 views
-1

У меня есть функция, которая в настоящее время возвращает unsigned char. Тем не менее, я хочу отнести это unsigned char к char*, но я все равно получаю приведение к/от указателя от/до целого числа с предупреждением разного размера.конвертировать из unsigned char в char *

Пусть foo быть функции, которые возвращают символ без знака

Я пытался что-то вроде этого:

char* convert = (char*)foo(); 

Причина для преобразования char* потому, что мне нужно использовать функцию strcasecmp выполнить строку сравнить.

+0

Зачем вам нужно преобразовать целочисленное значение 8 бит в значение указателя 32 бита (32-битная архитектура)? Пожалуйста, добавьте более подробную информацию по вашему вопросу. –

+0

Причина преобразования в char * заключается в том, что для выполнения сравнения строк мне нужно использовать функцию strcasecmp. –

+0

Как это должно работать? Char * должен указывать на массив, состоящий по крайней мере из этого символа, и конечный нулевой байт. – gnasher729

ответ

2

Вы не можете отличить возвращаемое значение функции не указателя в указателе. Подумайте об этом, на что указывает этот указатель?

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

char tmp = (char) foo(); 
char * ptr = &tmp; 

Edit:

В другой ответ сказал, что если вы хотите использовать strcasecmp вам потребуется char массив, в котором последний байт является нулевой терминатор.

+0

Это больше похоже на человека! Спасибо, я полностью забыл об этом !! havent действительно работает с указателем на некоторое время !!! В настоящее время я работаю над проектом брандмауэра в C, в то же время работая над проектом PHP для класса базы данных. Поэтому я до сих пор не касался указателя. Вы обновляете мой разум !! Еще раз спасибо! –

+1

Честно говоря, это не гарантирует уверенность пользователей продуктов брандмауэра. – gnasher729

+0

@ gnasher729 php и c - два отдельных проекта ... в моих вопросах я даже не дал указания о том, как все это работает с брандмауэром, я просто ставил свой вопрос на то, что я просто хочу добиться. Не имею никакого значения, я делаю продукт брандмауэра для публичного использования только для проекта класса. –

2

Чтобы достичь того, чего вы хотите, используйте следующий код:

char array [2]; 
array [0] = (char) foo(); 
array [1] = '\0'; 
... 
... strcasecmp (array, ...); 

Это создает массив, содержащий строку из одного символа, который вы можете использовать.

Смежные вопросы