2009-02-26 18 views
7

chcę odlewania moje NSString do stałej char kod znajduje się poniżej:odlewania NSString char problemem

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

NSLog(@"%@",datechar); 

jednak zwrócić ostrzegawczy zadanie sprawia całkowitą od wskaźnika bez oddanych i nie może wydrukować char prawidłowo, może ktoś mi powiedzieć co jest problemem

Odpowiedz

27

Spróbuj czegoś więcej tak:

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

Trzeba użyć char * zamiast char, i trzeba drukować ciągi C stosując% s% @ (% @ jest tylko objective-c typów id).

+5

UTF8String zwraca const char * –

1

Dodałbym a * pomiędzy char i datechar (a% s zamiast% @):

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

Myślę, że chcesz używać:

const char *datechar = [date UTF8String]; 

(zanotować * tam)

+1

powinno to być odpowiedź – Adamski

2

Twój kod ma 2 problemy:

1) "char datechar ..." to jednoliterowy, który miałby tylko jeden znak/bajt i nie byłby w stanie zachować całej tablicy, którą tworzysz z obiektu date/string. Dlatego twoja linia powinna mieć (*) przed zmienną, aby przechowywać wiele znaków, a nie tylko jeden.

2) Po powyższej poprawce, nadal otrzymasz ostrzeżenie o (char *) vs (const char *), w związku z tym musisz "rzucić", ponieważ są one technicznie takie same wyniki. Zmienić linię:

char datechar = [date UTF8String];

do

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

Zawiadomienie (char *) po znaku =, informuje kompilator, że wyrażenie zwróci (char *), w przeciwieństwie do jest domyślny (const char *).

Wiem, że już wcześniej zaznaczyłeś odpowiedź, ale pomyślałem, że mógłbym przyczynić się do wyjaśnienia problemów i sposobu ich naprawy.

Mam nadzieję, że to pomoże.

poważaniem Heider

0

I cierpiał przez długi czas, aby przekształcić NSString do char używać tej funkcji

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

próbowałem wszelkich odpowiedzi na to pytanie/wielu rzeczy z wyszukiwarki Google ale to nie działało dla mnie.

Wreszcie mam rozwiązanie.


Rozwiązanie:

NSString *digit = @"5"; 

char dtmf; 

char buf[2]; 

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

dtmf = buf[0];