2017-01-14 1 views
0

J'essaie de concaténer une chaîne avec un entier converti en chaîne et écrire le résultat dans un fichier.Convertir int en chaîne et concaténer le résultat

Il est mon code (simplifié):

char * convert_int_string(int val) 
{ 
    char * str = malloc(sizeof(char)*64); 
    sprintf(str,"%d",val); 
    return str; 
} 

char * parse_val(int val){ 
    char * str = malloc(sizeof(char)*64); 
    char * str2 = convert_int_string(val); 
    strcat(str, "test"); 
    strcat(str,str2); 
    free(str2); 
    return str; 
} 

fprintf(my_file, "%s\n", parse_val(42)); 

Mais j'obtenir ce résultat et je ne comprends pas pourquoi (ici val est égal à 42):

��7s�test42 

(je ce poste How do I concatenate const/literal strings in C? et celui-ci How to convert integer to string in C?)

+4

'strcat (str," test ");' -> 'strcpy (str," test ");' : Le bloc mémoire retourné par 'malloc' n'est pas initialisé. – BLUEPIXY

+1

'str' dans' parse_val() 'a été alloué de la mémoire mais vous ne pouvez pas' concat' sans initialiser cette mémoire. –

+0

Bien, merci @BLUEPIXY. Fonctionne bien – Eraseth

Répondre

2

La raison pour laquelle vous obtenez une sortie garbaged est parce que ce que vous donnez à strcat est garbage. En effet, vous avez calculé 64 octets pour str mais vous ne l'avez pas initialisé, donc vous ne savez pas quels octets il contient. Vous pouvez utiliser calloc au lieu de malloc ou utiliser memset pour mettre 0 dans str.

EDIT: En fait, il suffit de mettre \ 0 comme premier octet de str. En effet, strcat recherche d'abord le caractère \ 0 dans la chaîne de destination, puis il ajoute la deuxième chaîne