2010-11-10 10 views
10

Voglio inizializzare la stringa in C per svuotare la stringa. ho provato:Inizializza una stringa in C per svuotare la stringa

string[0] = ""; 

ma scritto

"warning: assignment makes integer from pointer without a cast" 

Come devo fare, allora?

+1

Qual è il punto di dichiarare una stringa di 0 caratteri? – cdhowie

+0

Qual è il tipo di stringa? È un puntatore char o un array di caratteri? – nos

+0

Che cos'è 'stringa'? – leppie

risposta

5

Assumendo che l'array chiamato 'stringa' esiste già, provate

string[0] = '\0'; 

\0 è il terminatore NUL esplicita, necessaria per segnare la fine della stringa.

+22

Semnaticamente, che dovrebbe essere 'stringa [0] = '\ 0';' ... –

+0

@badgerr: vorresti cambiare la risposta per usare ''\ 0''? – pevik

20

si desidera impostare il primo carattere della stringa a zero, in questo modo:

char myString[10]; 
myString[0] = '\0'; 

(O myString[0] = 0;)

Oppure, in realtà, su inizializzazione, si può fare:

char myString[10] = ""; 

Ma questo non è un modo generale per impostare una stringa a lunghezza zero una volta che è stata definita.

+0

Minimo sforzo.:) –

+3

'char myString [1] =" ";' sicuramente? Hai bisogno di spazio per il terminatore null. Correzione – JeremyP

+1

: si potrebbe fare 'char myString [10] =" ";' – ruslik

3

Assegnazione di stringhe char matrice è consentito solo durante la dichiarazione:

char string[] = ""; 

Questo dichiara stringa come un array di caratteri di dimensione 1 e inizializza con \0.

Prova anche questo:

char str1[] = ""; 
char str2[5] = ""; 
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5 
12

Oltre alla versione di Will Dean, il seguente sono comuni per tutta l'inizializzazione del buffer:

char s[10] = {'\0'}; 

o

char s[10]; 
memset(s, '\0', sizeof(s)); 

o

char s[10]; 
strncpy(s, "", sizeof(s)); 
1
string[0] = ""; 
"warning: assignment makes integer from pointer without a cast

Ok, tuffiamoci nell'espressione ...

0 un int: rappresenta il numero di caratteri (supponendo string è (o decaduta in) un char *) per avanzare dall'inizio dell'oggetto string

string[0]: l'oggetto char situato all'inizio della oggetto string

"": stringa letterale: un oggetto di tipo char[1]

=: assegnazione dell'operatore: trie per assegnare un valore di tipo char[1] a un oggetto di tipo char. char[1] (decaduto a char*) e char non sono compatibili incarico, ma il compilatore fida di te (il programmatore) e va avanti con l'assegnazione comunque lanciando il tipo char* (cosa char[1] decaduto a) ad un int --- e si ottiene la avvertimento come bonus. Hai un compilatore davvero bello :-)

+0

Otterrebbe più upvotes se avesse una soluzione; questa è una buona spiegazione di ciò che sta accadendo però. – wizzwizz4

+0

Sono d'accordo @ wizzwizz4, ma mi piace la mia risposta così com'è. Grazie! – pmg

2

calloc alloca la memoria richiesta e restituisce un puntatore ad esso. Imposta anche la memoria allocata su zero.

Nel caso in cui si prevede di utilizzare il string stringa come vuota per tutto il tempo:

char *string = NULL; 
string = (char*)calloc(1, sizeof(char)); 

Nel caso in cui si prevede di conservare un certo valore nella vostra string tardi:

char *string = NULL; 
int numberOfChars = 50; // you can use as many as you need 
string = (char*)calloc(numberOfChars + 1, sizeof(char)); 
0

penso Amarghosh ha risposto correttamente. Se si desidera inizializzare una stringa vuota (senza conoscere la dimensione) il modo migliore è:

//this will create an empty string without no memory allocation. 
char str[]="";// it is look like {0} 

Ma se si desidera inizializzare una stringa con una dotazione di memoria fissa si può fare:

// this is better if you know your string size.  
char str[5]=""; // it is look like {0, 0, 0, 0, 0} 
0

E ' un po 'tardi, ma credo che il problema può essere che hai creato una matrice di lunghezza zero, piuttosto che una serie di lunghezza 1.

una stringa è una serie di caratteri seguiti da un terminatore di stringa ('\0'). Una stringa vuota ("") non contiene caratteri seguiti da un carattere di terminatore a stringa singola, vale a dire un carattere in totale.

quindi vorrei provare quanto segue:

string[1] = ""

Si noti che questo comportamento non è il emulato da strlen, che non conta il terminatore come parte della lunghezza della stringa.

Problemi correlati