2011-09-10 5 views
3

J'ai créé une fonction pour convertir un nombre en un nombre romain. Je sais que la logique de la conversion elle-même est correcte, cependant, chaque fois que strncpy est appelée, elle écrase la valeur précédente de "rom". J'ai même essayé de l'appeler de retour et il a seulement rendu le dernier.strncpy écrase la chaîne de caractères existante

Voici un extrait du code:

char* rom = (char*) calloc (10,sizeof(char)); 

    while(intval>=1000){ 
     intval -= 1000; 
    strncpy(rom,"M",2); 
    } 

Peut-être à l'aide calloc fait partie de la question, mais j'ai essayé d'utiliser malloc et il m'a donné le même résultat.

+0

Vous pouvez poster le code dans votre question, et il est préféré de sorte que si un site externe tombe en panne, les liens ne se cassent pas et les questions ne deviennent pas peu serviable. –

+0

Deux pincettes. Premièrement, 'sizeof (char)' est '1', pourquoi s'embêter à écrire tout ça? Deuxièmement - ne pas convertir la valeur de retour de 'calloc()' - elle peut cacher les bogues '# include 'qui reviendront vous mordre comme des erreurs de liens. –

+2

strncpy fait ce que strncpy fait. Et dans votre cas, puisque toutes vos valeurs sources sont des littéraux et que vous spécifiez la longueur du littéral, y compris le caractère nul, il fait exactement ce que fait strcpy. –

Répondre

11

vous souhaitez ajouter, mais strcpy juste des copies à l'adresse (et remplace). utiliser strcat ou strncat

3

Je crois que vous voulez strcat() et non strcpy()

Questions connexes