Pages : 1
#1 Le 08/09/2008, à 22:00
- binoua
[Resolu]Les bases du C
yop,
Je programme pas mal en C et je pense avoir atteint un niveau correct.
Or mon j'ai un bug tres bizarre avec mon programme. Donc je me demande s'il y
a une base que je n'ai pas compris.
Avec mon compilateur (à jour) ca bug et avec le compilateur de la fac (pas à jour) ça bug pas.
int main (void){
int lSeq=20,i;
char seq[20]="AGCTGCGTGCCATGCCCATG";
char arn[20];
// char *arn = (char *) calloc (20,sizeof(char));
for (i=0; i<lSeq; i++){
if (seq[i] == 'T') arn[i] = 'U';
else arn[i] = seq[i];
}
printf("ADN : %s\nARN : %s\n",seq,arn);
return 0;
}
Sans calloc ça marche pas, avec calloc ça marche....
Merci de votre aide
Dernière modification par binoua (Le 08/09/2008, à 22:48)
Hors ligne
#2 Le 08/09/2008, à 22:39
- tiky
Re : [Resolu]Les bases du C
C'est une erreur classique de débutant. Les chaînes de caractères en C se terminent toujours par un caractère nul afin de les délimiter. http://fr.wikipedia.org/wiki/Cha%C3%AEne_de_caract%C3%A8res
Si tu oublies ce caractère, printf lira dans la mémoire jusqu'à le rencontrer ce qui provoquera un bug mais pas toujours. Voilà un code corrigé et nettoyé qui fonctionne.
#include <stdlib.h>
#include <stdio.h>
#define SIZE 20
int main( void )
{
int i;
char seq[ SIZE + 1 ] = "AGCTGCGTGCCATGCCCATG";
char arn[ SIZE + 1 ];
for( i = 0; i < SIZE; i++ )
{
if( seq[i] == 'T' )
arn[i] = 'U';
else
arn[i] = seq[i];
}
arn[ SIZE ] = '\0';
printf( "ADN : %s\nARN : %s\n", seq, arn );
return 0;
}
Rq: Tu remarqueras le +1 pour la taille, c'est pour ajouter le caractère nul, il est explicitement ajouté pour seq[], mais tu dois l'ajouter toi-même pour arn[].
Dernière modification par tiky (Le 08/09/2008, à 22:41)
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#3 Le 08/09/2008, à 22:40
- qqun
Re : [Resolu]Les bases du C
salut ,
tu devrait rajouter un caractère nul '\0' a la fin du taleau arn[]
et dimensionner tes tableaux a N+1 .
http://www.commentcamarche.net/c/cstring.php3
#4 Le 08/09/2008, à 22:48
- binoua
Re : [Resolu]Les bases du C
gagné !!!
bon ben du coup j'ai bien honte de moi !!!
merci bien
Hors ligne
#5 Le 09/09/2008, à 21:23
- robrob
Re : [Resolu]Les bases du C
Quelques variantes:
- avec strlen pour connaître la taille d'une chaîne
- avec strcat pour ajouter une chaîne à une chaîne
- avec strncat pour ajouter un bout de chaîne donné à une chaîne
...
size_t i;
arn[0]='\0'; // initialise la chaîne de destination comme une chaîne vide
for( i = 0; i < strlen(seq); i++ )
{
if( seq[i] == 'T' )
strcat(arn,"U");
else
strncat(arn,seq+i,1);
}
printf( "ADN : %s\nARN : %s\n", seq, arn );
...
-avec strcpy pour copier une chaîne de caractère (avec le \0)
-avec strchr pour cherche un caractère dans une chaîne:
...
strcpy(arn,seq); // copie la chaîne
char *pt=arn; // initialise le pointeur de recherche au premier caractère de la chaîne
do
{
pt=strchr(pt,'T'); // retourne le pointeur sur le premier caractère 'T' trouvé
if (pt==NULL)
break; // pas de caractère 'T' trouvé, on sort
*(pt++)='U'; // remplace le caractère courant par 'U', passe au caractère suivant
}
while(1);
printf( "ADN : %s\nARN : %s\n", seq, arn );
...
Ces fonctions nécessitent d'inclure string.h
Hors ligne
#6 Le 09/09/2008, à 21:28
- robrob
Re : [Resolu]Les bases du C
A noter que tu peux remplacer
char seq[20]="AGCTGCGTGCCATGCCCATG";
char arn[20];
par
char seq[]="AGCTGCGTGCCATGCCCATG";
char arn[sizeof(seq)];
Hors ligne
Pages : 1