2015-12-03 10 views
6

Come posso aggiungere "." alla matrice di caratteri: = "Hello World" in C, quindi ottengo una matrice di caratteri: "Hello World". La domanda sembra semplice ma sto lottando.Come aggiungere un char/int a un array di caratteri in C?

provato quanto segue:

char str[1024]; 
char tmp = '.'; 

strcat(str, tmp); 

Ma non funziona. Mi mostra l'errore: "passare l'argomento 2 di 'strcat' rende il puntatore dal numero intero senza un cast" So che in C un char può essere lanciato anche come int. Devo convertire il tmp in un array di char o c'è una soluzione migliore?

+0

S tr non contiene stringhe, solo la dichiarazione delle dimensioni hehe –

+0

Possibile duplicato di [come posso convertire un carattere in un carattere array in C++] (http://stackoverflow.com/questions/27522984/how-can-i-strcat-one- character-to-array-character-in-c) – MikeCAT

+0

Questo era solo un esempio con Hello World per descrivere il problema. Deve essere vuoto come prima nel mio vero programma. Il programma lo riempirà in seguito. Il problema contiene solo l'aggiunta di un char/int a un array di caratteri. – missjohanna

risposta

11

strcat ha la dichiarazione:

char *strcat(char *dest, const char *src) 

si aspetta 2 stringhe. While this compiles:

char str[1024] = "Hello World"; 
char tmp = '.'; 

strcat(str, tmp); 

Sarà causare problemi di memoria difettosi a causa strcat è alla ricerca di un null terminata CString. Si può fare questo:

char str[1024] = "Hello World"; 
char tmp[2] = "."; 

strcat(str, tmp); 

Live example.

Se davvero si vuole aggiungere un char è necessario per rendere la propria funzione. Qualcosa del genere:

void append(char* s, char c) { 
     int len = strlen(s); 
     s[len] = c; 
     s[len+1] = '\0'; 
} 

append(str, tmp) 

Naturalmente si può anche voler controllare la dimensione della stringa ecc. Per renderla sicura.

+1

Ho cancellato la mia risposta e supporto la tua, l'hai spiegata meglio –

+0

Questa è la strada da percorrere. La tua funzione di aggiunta farà il lavoro. – bruceg

+0

Devo definire char tmp [2] con una variabile di tipo char. (char temp = x; char tmp [2] = temp;) ma mi dice che ho un inizializzatore non valido. Dov'è il problema? – missjohanna

0

Penso che tu abbia dimenticato di inizializzare la stringa "str": è necessario inizializzare la stringa prima di utilizzare strcat. E anche tu hai bisogno che quel tmp fosse una stringa, non un singolo carattere. Try Change questo:

char str[1024]; // Only declares size 
char tmp = '.'; 

per

char str[1024] = "Hello World"; //Now you have "Hello World" in str 
char tmp[2] = "."; 
1

L'errore è dovuto al fatto che si sta passando un torto a strcat(). Guarda prototipo strcat() 's:

char *strcat(char *dest, const char *src); 

Ma si passa char come secondo argomento, che è ovviamente sbagliato.

Utilizzare invece snprintf().

char str[1024] = "Hello World"; 
char tmp = '.'; 
size_t len = strlen(str); 

snprintf(str + len, sizeof str - len, "%c", tmp); 

Come commentato by OP:

That was just a example with Hello World to describe the Problem. It must be empty as first in my real program. Program will fill it later. The problem just contains to add a char/int to an char Array

In tal caso, snprintf() grado di gestire facilmente per "aggiungere" tipi interi a un buffer char troppo. Il vantaggio di snprintf() è che è più flessibile concatenare vari tipi di dati in un buffer di caratteri.

Ad esempio per concatenare una stringa, char e un int:

char str[1024]; 
ch tmp = '.'; 
int i = 5; 

// Fill str here 

snprintf(str + len, sizeof str - len, "%c%d", str, tmp, i); 
1

In una stringa C/C++ è un array di char terminato con un byte NULL ('\0');

  1. Lo string string non è stato inizializzato.
  2. È necessario concatenare stringhe e si sta tentando di concatenare un singolo carattere (senza il byte null in modo che non sia una stringa) su una stringa.

Il codice dovrebbe essere simile a questo:

char str[1024] = "Hello World"; //this will add all characters and a NULL byte to the array 
char tmp[2] = "."; //this is a string with the dot 
strcat(str, tmp); //here you concatenate the two strings 

Si noti che è possibile assegnare una stringa letterale a una matrice solo durante la sua dichiarazione.
Ad esempio, il seguente codice non è consentito:

char str[1024]; 
str = "Hello World"; //FORBIDDEN 

e dovrebbe essere sostituito con

char str[1024]; 
strcpy(str, "Hello World"); //here you copy "Hello World" inside the src array 
0

consiglia di sostituire questo:

char str[1024]; 
char tmp = '.'; 

strcat(str, tmp); 

con questo:

char str[1024] = {'\0'}; // set array to initial all NUL bytes 
char tmp[] = "."; // create a string for the call to strcat() 

strcat(str, tmp); // 
+0

Questa è una soluzione per il problema che ho dato come esempio. Ma ho detto che uno è un array di caratteri e l'altro è un carattere. Se si trattasse di soli 2 array di caratteri, non ci sono problemi. Nel mio programma principale ottengo un char o int da fgetc. Potrebbe funzionare se scrivo: char tmp [2]; tmp [1] = fgetc (); ma non sono sicuro! – missjohanna

+0

data la tua modifica della domanda, potresti provare: char newstr [strlen (str) +2] = {'\ 0'}; strcpy (newstr, str); newstr [strlen (newstr)] = tmp; – user3629249

Problemi correlati