9 Stimmen

Casting eines NSString zu char Problem

Ich möchte meinen NSString in eine konstante Zeichenfolge umwandeln. Der Code ist unten dargestellt:

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

NSLog(@"%@",datechar);

es wird jedoch eine Warnung ausgegeben Zuweisung macht Integer aus Zeiger ohne Cast und kann das Zeichen nicht richtig drucken, kann mir jemand sagen, was das Problem ist?

30voto

Joel Levin Punkte 2850

Versuchen Sie eher so etwas wie dies:

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

Sie müssen char* anstelle von char verwenden, und Sie müssen C-Zeichenfolgen mit %s und nicht mit %@ ausgeben (%@ ist nur für Objective-c id-Typen).

6 Stimmen

UTF8String gibt ein const char* zurück

8voto

Marc Novakowski Punkte 43303

Ich glaube, Sie wollen es verwenden:

const char *datechar = [date UTF8String];

(man beachte den * darin)

1 Stimmen

Dies sollte die Antwort sein

3voto

Heider Sati Punkte 2242

Ihr Code hat 2 Probleme:

1) "char datechar..." ist ein Einzelzeichen, das nur ein Zeichen/Byte enthält und nicht das gesamte Array, das Sie aus Ihrem date/string-Objekt erzeugen. Daher sollte in Ihrer Zeile ein (*) vor der Variable stehen, um mehrere Zeichen zu speichern und nicht nur ein Zeichen.

2) Nach der obigen Korrektur würden Sie immer noch eine Warnung über (char *) vs (const char *) erhalten, daher müssten Sie "casten", da sie technisch die gleichen Ergebnisse sind. Ändern Sie die Zeile von:

char datechar = [date UTF8String];

in

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

Beachten Sie, dass (char *) nach dem =-Zeichen dem Compiler mitteilt, dass der Ausdruck ein (char *) im Gegensatz zu seinem Standard (const char *) zurückgeben würde.

Ich weiß, dass Sie die Antwort bereits markiert haben, aber ich dachte, ich könnte dazu beitragen, die Probleme zu erklären und wie man sie im Detail beheben kann.

Ich hoffe, das hilft.

Mit freundlichen Grüßen Heider

1voto

mouviciel Punkte 64583

Ich würde ein * zwischen char und datechar einfügen (und ein %s statt eines %@):

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

0voto

MaxEcho Punkte 13901

Ich habe lange darunter gelitten, mich zu bekehren. NSString a char für diese Funktion zu verwenden

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

Ich habe jede Antwort auf diese Frage/viele Dinge aus der Google-Suche ausprobiert, aber es hat bei mir nicht funktioniert.

Endlich habe ich die Lösung gefunden.


Lösung:

NSString *digit = @"5";

char dtmf;

char buf[2];

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

dtmf = buf[0];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X