PDA

Visualizza la versione completa : C - Problema con la gestione delle stringhe


vanki
16-02-2010, 19:09
Salve a tutti,
ho un piccolo problema con l'uso delle stringhe in C. In particolare vi chiedo come:
1) Ottenere convertire un array di interi in una stringa s1
2) Ottenere una matrice di una particolare tipologia di interi in una stringa s2
3) Ottenere una terza stringa come concatenazione delle recedenti


Ho provato con il seguente codice.. ma ottengo Segmentaion fault


//Parte 1: Stringa da array

srand(time(NULL));
char s_dest[]="";
char s_orig[]="";


for(i=0;i<t;i++){
int xx=rand()%2;
mpz_init_set_ui(s[i],xx);
mpz_get_str (s_orig, 62, s[i]);
strcat(s_dest, s_orig);
}

printf("S_dest= %s",s_dest);

////Parte 2: Stringa da matrice

char str[]="";
char str2[]="";

mpz_init(y_);
mpz_init(ij_);
mpz_set_ui(ij_,uno);

for (i=0; i<k_d; i++) /* scandisco le righe con l'indice i */
{ mpz_mul(Ry[i],ij_,ij_);
for (j=0; j<d_; j++) /* e le colonne con j */
{mpz_mul(y_,R[i][j],y[j]);
mpz_mul(Ry[i],Ry[i],y_);
mpz_mod(Ry[i],Ry[i],p);}

mpz_get_str(str2, 62, Ry[i]);
strcat(str, str2);

}


//Parte 3: Concateno le due stringhe
strcat(str, s_dest);


Grazie in anticipo! :)

oregon
16-02-2010, 20:04
Il problema di tutti i tuoi esempi è l'allocazione dello spazio per le stringhe.

Non allochi mai lo spazio e quindi non potrai scrivere al loro interno (con la strcat e simili)

vanki
16-02-2010, 20:21
ok, grazie innanzi tutto.
Ho provato con malloc().. ma adesso a video ho :

Stringa di input: 6�銪5l�w�k�ߊ���+����Ћ«_���p69�b uc�����M�
nf�~S�v��dvM^h��)͗�{�����?�Q
ɢ�t��x�*��q0x��5pJvlJYgaJc6GZggGJmHUU8Oi92aj3Fe YC4jNfYGruid5EdMWorSmA3zye7kfLFRC0uO4nzZFZqU8NnSTo kqq2vDhU6Fsb5VB1kdIqWb9GoRoXKacPRQzksMix17FSv3t0Bj Zo8rdGFVy11HR2J9AepunTtAkQguQub4qfqRBZZQس>0110

che non mi pare tanto corretta ... :dhò:

oregon
16-02-2010, 20:22
Hai provato "come"?

P.S. Attenzione quando rispondi al formato ...

vanki
16-02-2010, 20:31
Ho provato così:



srand(time(NULL));
int dim=t;
char *s_dest;
s_dest = (char *) malloc(dim*sizeof(char));
//char s_dest[t+1];
char *s_orig;
s_orig = (char *) malloc(dim*sizeof(char));

for(i=0;i<t;i++){
int xx=rand()%2;
mpz_init_set_ui(s[i],xx);
mpz_get_str (s_orig, 62, s[i]);
strcat(s_dest, s_orig);
}

printf("S_dest= %s",s_dest);

////Parte 2: Stringa da matrice

int dim2=1000;
int dim3=dim+dim2*k_d;
char *str;
str = (char *) malloc(dim3*sizeof(char));
//char s_dest[t+1];
char *str2;
str2 = (char *) malloc(dim2*sizeof(char));

mpz_init(y_);
mpz_init(ij_);
mpz_set_ui(ij_,uno);

for (i=0; i<k_d; i++) /* scandisco le righe con l'indice i */
{ mpz_mul(Ry[i],ij_,ij_);
for (j=0; j<d_; j++) /* e le colonne con j */
{mpz_mul(y_,R[i][j],y[j]);
mpz_mul(Ry[i],Ry[i],y_);
mpz_mod(Ry[i],Ry[i],p);}

mpz_get_str(str2, 62, Ry[i]);
strcat(str, str2);

}


//Parte 3: Concateno le due stringhe
strcat(str, s_dest);



ma evidentemente sbaglio !

oregon
16-02-2010, 20:41
Nel primo codice allochi t caratteri ... ma quanto vale t ?

vanki
16-02-2010, 20:47
t vale 4 (è anche la dimensione dell'array s)

oregon
16-02-2010, 20:54
Quindi s_dest non potrà essere più lunga di 3 caratteri (piu' il terminatore ...) ... corretto?

vanki
16-02-2010, 20:59
Esatto, ma ho provato anche ad impostare altri valori di t, senza però ottenere risultati corretti.

oregon
16-02-2010, 21:20
Sì ... ma quando esegui la strcat e aggiungi dati alla stringa, questa si aspetta che lo spazio ci sia nella stringa ? Quindi ti bastano i 3 caratteri anche se ne aggiungi altri?

E poi ... cosa fanno le funzioni

mpz_init_set_ui(s[i],xx);
mpz_get_str (s_orig, 62, s[i]);

?

Loading