2009-02-26 13 views
7

voglio lanciare la mia NSString ad una costante char il codice è il seguente:lanciare un NSString a char problema

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

NSLog(@"%@",datechar); 

comunque tornare l'avviso assegnazione rende intero da puntatore senza un cast e non ci riesce stampare il char correttamente, qualcuno può dirmi qual è il problema

risposta

27

Provare qualcosa di più simile a questo:

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

è necessario utilizzare char * invece di char, e si deve stampare stringhe C usando% s non% @ (% @ è solo per i tipi di id Objective-C).

+5

UTF8String restituisce un const char * –

1

vorrei aggiungere un * tra il char e datechar (e un% s al posto di un% @):

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

Penso che si desidera utilizzare:

const char *datechar = [date UTF8String]; 

(notare l'* in là)

+1

questo dovrebbe essere la risposta – Adamski

2

Il codice ha 2 problemi:

1) "char datechar ..." è un carattere singolo, che contiene solo un carattere/byte e non contiene l'intero array che stai producendo dal tuo oggetto data/stringa. Pertanto, la linea deve avere un (*) davanti alla variabile per memorizzare più caratteri anziché solo uno.

2) Dopo la correzione di cui sopra, si otterrebbe comunque un avviso a proposito di (char *) vs (const char *), pertanto, è necessario "trasmettere" poiché sono tecnicamente gli stessi risultati. Modificare la riga di:

char datechar = [date UTF8String];

in

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

Avviso (char *) dopo il segno =, dice al compilatore che l'espressione avrebbe restituire un (char *) al contrario di è predefinito (const char *).

So che hai già segnato la risposta in precedenza, tuttavia, ho pensato di poter contribuire a spiegare i problemi e come risolvere in maggiore dettaglio.

Spero che questo aiuti.

Cordiali saluti Heider

0

stavo soffrendo per un lungo tempo per convertire NSString a char da utilizzare per questa funzione

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

Ho provato ogni risposta di questa domanda/molte cose da ricerca di Google ma non ha funzionato per me.

Finalmente ho trovato la soluzione.


Soluzione:

NSString *digit = @"5"; 

char dtmf; 

char buf[2]; 

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

dtmf = buf[0];