приведение NSString к проблеме char

Я хочу преобразовать свой NSString в постоянный символ, код показан ниже:

NSString *date = @"12/9/2009";
char datechar = [date UTF8String]

NSLog(@"%@",datechar);

однако он возвращает предупреждение, назначение которого делает целое число из указателя без приведения и не может правильно распечатать char, может ли кто-нибудь сказать мне, в чем проблема

Ответов (5)

Решение

Попробуйте что-нибудь подобное:

NSString* date = @"12/9/2009";
char* datechar = [date UTF8String];
NSLog(@"%s", datechar);

Вам нужно использовать char * вместо char, и вы должны печатать строки C, используя% s, а не% @ (% @ только для типов идентификаторов objective-c).

Я страдал в течение длительного времени , чтобы преобразовать NSString в char использовать для этой функции

-(void)gpSendDTMF:(char) digit callID: (int)cid;

Я пробовал каждый ответ на этот вопрос / многое из поиска Google, но у меня это не сработало.

Наконец-то у меня есть решение.


Решение:

NSString *digit = @"5";

char dtmf;

char buf[2];

sprintf(buf, "%d", [digit integerValue]);

dtmf = buf[0];

В вашем коде 2 проблемы:

1) «char datechar ...» - это односимвольный, который будет содержать только один символ / байт и не будет содержать весь массив, который вы создаете из своего объекта даты / строки. Следовательно, ваша строка должна иметь (*) перед переменной для хранения нескольких символов, а не только одного.

2) После вышеупомянутого исправления вы все равно получите предупреждение о (char *) vs (const char *), поэтому вам нужно будет "cast", поскольку они технически имеют одинаковые результаты. Измените строку:

char datechar = [date UTF8String];

в

char *datechar = (char *)[date UTF8String];

Примечание (char *) после знака = сообщает компилятору, что выражение вернет (char *) вместо значения по умолчанию (const char *).

Я знаю, что вы уже отметили ответ ранее, однако я подумал, что могу внести свой вклад, чтобы более подробно объяснить проблемы и способы их устранения.

Надеюсь, это поможет.

С уважением, Хайдер

Я бы добавил * между char и datechar (и% s вместо% @):

NSString *[email protected]"12/9/2009"; char * datechar=[date UTF8String];
NSLog(@"%s",datechar);

Я думаю, вы хотите использовать:

const char *datechar = [date UTF8String];

(обратите внимание на * там)