Oppure

Loading
03/06/14 19:58
pocho183
salve a tutti,

Vorrei fare una conversione di array di interi in array di stringhe,(decimale) tipo:
int a {120,23,240}
char string []
ecc.
Ho visto la conversione itoa, però non riesco a fare conversione di array, mi converte
un solo valore, potreste aiutarmi ?
aaa
03/06/14 20:01
Poggi Marco
Ciao!

Implementa un ciclo che esamina tutti gli elementi del vettore.
In che modo intendi formattare la stringa con il risultato ?
aaa
03/06/14 20:19
Io farei così, o qualcosa di simile:

#include <stdio.h>
#include <stdlib.h>

#define kNEl    3

int main() {
    int i, a[kNEl] = { 120, 23, 240 };
    char s[kNEl][12];

    for( i=0; i<kNEl; i++ )
        sprintf( s[i], "%d", a[i] );

 /* ora nell'array s[] c'e' una rappresentazione in
    formato stringa di ciascuno dei valori presenti
    in a[]: che ci vogliamo fare? */
    
    return 0;
}
03/06/14 20:29
Stando a quello che dice Marco, potrebbe essere che intendevi un'altra cosa, ovvero una sola stringa contenente tutti i valori divisi da un qualche carattere separatore. Ipotizzando di voler utilizzare la virgola come separatore e il carattere di "a capo" come terminatore della sequenza, a me è venuta in mente una soluzione tipo questa:

#include <stdio.h>
#include <stdlib.h>

#define kNEl    3

int main() {
    int i, a[kNEl] = { 120, 23, 240 };
    char s[12*kNEl];
    char *ptr = s;
    char sep[] = { ',', '\n' };

    for( i=0; i<kNEl; i++ )
        ptr += sprintf( ptr, "%d%c", a[i], sep[i==(kNEl-1)] );

 /* ora s[] contiene un'unica stringa C nel formato d'una
    sequenza di sottostringhe separate da virgole e terminata
    da un carattere 'new line'; ogni sottostringa rappresenta
    uno dei valori dell'array a[] */

    printf( "\n %s\n", s );

    return 0;
}
Ultima modifica effettuata da 03/06/14 20:34
04/06/14 10:22
pocho183
questo modo è corretto ?

int i,lunghezza=3;
int valori_interi[lunghezza]={120,43,253};
char array_string[lunghezza][12];


int main () {
.
.
Convert(valori_interi,lunghezza);
.
.
}

void Convert(unsigned int *array_interi,int len) {
	for(i=0;i<len;i++){
		sprintf(array_string[i],"%d",array_interi[i]);
	}
}


Vorrei chiedere dei chiarimenti
su questa riga:
char array_string[len][12]; (perché proprio 12)

E sprintf è solo una conversione non stampa a schermo nulla
(a me serve che non stampi nulla., cioè carichi solo i valori
nella stringa convertita)?
Ultima modifica effettuata da pocho183 04/06/14 10:32
aaa
04/06/14 12:50
Prima di leggere le mie risposte, vorrei che tenessi presente quel che c'è nella "firma" d'ogni mio messaggio: "Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!". Giusto per mettere le mani avanti. Detto questo...

Chiedi: "char array_string[len][12]; (perché proprio 12)"

Perché se converti valori contenuti in variabili di tipo int (che si solito sono 4 byte) puoi avere come valore massimo due miliardi e rotti in positivo o in negativo. In positivo, si tratta di un massimo di 10 cifre, in negativo, dieci cifre più il segno meno. L'eventuale segno, più dieci cifre, più il terminatore 'Prima di leggere le mie risposte, vorrei che tenessi presente quel che c'è nella "firma" d'ogni mio messaggio: "Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!". Giusto per mettere le mani avanti. Detto questo...

Chiedi: "char array_string[len][12]; (perché proprio 12)"

Perché se converti valori contenuti in variabili di tipo int (che si solito sono 4 byte) puoi avere come valore massimo due miliardi e rotti in positivo o in negativo. In positivo, si tratta di un massimo di 10 cifre, in negativo, dieci cifre più il segno meno. L'eventuale segno, più dieci cifre, più il terminatore '{parsed_message}' fanno un massimo di dodici caratteri nella stringa.

Chiedi: "sprintf è solo una conversione non stampa a schermo nulla?"

La funzione sprintf() è identica alla funzione printf(), ma immette il suo output in un array di caratteri passato come primo parametro anziché inviarlo alla console stdout. Quindi sì, è solo una conversione e non stampa a schermo nulla.' fanno un massimo di dodici caratteri nella stringa.

Chiedi: "sprintf è solo una conversione non stampa a schermo nulla?"

La funzione sprintf() è identica alla funzione printf(), ma immette il suo output in un array di caratteri passato come primo parametro anziché inviarlo alla console stdout. Quindi sì, è solo una conversione e non stampa a schermo nulla.
04/06/14 13:14
A me sembra che nel tuo codice ci si siano diverse cose che non vanno.

1. Non è ammesso l'uso di una variabile per definire le dimensioni di un array. Usa una costante:

#define kLunghezza	3

int i;
int valori_interi[kLunghezza] = { 120, 43, 253 };
char array_string[kLunghezza][12];


(potresti anche allocare l'array dinamicamente, nel qual caso potresti usare una variabile, ma sarebbe un po' più complicato)

2. Non ha molto senso usare una variabile globale per un contatore come i. Io avrei "confinato" i nello scopo della funzione che lo usa:

int valori_interi[kLunghezza] = { 120, 43, 253 };
char array_string[kLunghezza][12];

/* [...] */

void Convert( unsigned int *array_interi, int len ) {
    int i;
    
    for( i=0; i<len; i++) {
        sprintf( array_string[i], "%d", array_interi[i] );
    }
}


3. Usi la funzione Convert() prima di averla definita o dichiarata. O sposti il corpo della funzione Convert() definendola prima di main(), o la dichiari prima di main() pur non spostandone la definizione:

#define kLunghezza 3

int valori_interi[kLunghezza] = { 120, 43, 253 };
char array_string[kLunghezza][12];

void Convert( unsigned int *array_interi, int len );

int main () {
    Convert( valori_interi, kLunghezza );
}

void Convert( unsigned int *array_interi, int len ) {
    int i;
    
    for( i=0; i<len; i++) {
        sprintf( array_string[i], "%d", array_interi[i] );
    }
}


4. Non puoi passare un puntatore ad un array di tipo int ad una funzione che ne richiede uno di tipo unsigned int. Devi far collimare i due tipi:

int valori_interi[kLunghezza] = { 120, 43, 253 };

void Convert( int *array_interi, int len );


5. La funzione main() deve restituire un valore di ritorno di tipo int (zero se non si verificano errori).

Alla fine della fiera, il codice revisionato potrebbe essere una cosa del genere:

#include <stdio.h>
#include <stdlib.h>

#define kLunghezza 3

int valori_interi[kLunghezza] = { 120, 43, 253 };
char array_string[kLunghezza][12];

void Convert( int *array_interi, int len );

int main () {
    Convert( valori_interi, kLunghezza );
    return 0;
}

void Convert( int *array_interi, int len ) {
    int i;

    for( i=0; i<len; i++) {
        sprintf( array_string[i], "%d", array_interi[i] );
    }
}

Ultima modifica effettuata da 04/06/14 13:20
04/06/14 14:25
pocho183
Grazie, sei fortissimo!

Mi da un errore:
dice che un argomento char* è incompatibile con uno unsigned char.
presumo che il char* sia di sprintf e unsigned char sia il char della dichiarazione,
come risolvere?
Ultima modifica effettuata da pocho183 04/06/14 15:28
aaa