Problème avec char motSecret[] = ""; Dés lors Qu'il exède les 8 char
25 réponses
clapannac
Bonjour, Voila je commence a coder sous C et j'ai une fonction qui patine sans que j'en trouve l'erreur...
Alors j'espère que vous pourrez me faire par de vos lumière.
Cordialement
Voici le code ...
###################### les fichiers source ###############
Main.c #
########
printf("Longueur du mot secre : ");
Etoile_Secr(motSecret);
printf("Propose une lettre : ");
lettreTap = lireCaractere();
printf("Etat du mot secre : ");
printf("%s",Result_Trouve_Cache_Save(motSecret,lettreTap));
return 0;
}
###########
Fonction.c #
###########
char lireCaractere()
{
char caractere = 0;
caractere = getchar(); // On lit le premier caractère
caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
// On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
while (getchar() != '\n') ; // il y a un ";" car c'est une boucle minimaliste "Technique de programmeur"
return caractere; // On retourne le premier caractère qu'on a lu
}
void Etoile_Secr(char* Tab)
{
int i = 0;
for(i=0;i<Tab[i];i++)
{
printf("*");
}
printf("\n");
}
char* Result_Trouve_Cache_Save(char* Tab,char lettre)
{
int i = 0;
char* copieTab = 0;
int longueurChaine = 0;
longueurChaine = strlen(Tab);
copieTab = malloc(longueurChaine);
if (copieTab == 0)
{
exit(0);
}
for (i = 0 ; i < Tab[i] ; i++)
{
if (lettre == Tab[i])
{
copieTab[i] = lettre;
printf("%s\n",copieTab); // J'ai testé pour voir et je comprend pas
}
else
{
copieTab[i] = '*';
printf("%s\n",copieTab); // J'ai testé pour voir et je comprend pas
}
}
// free(copieTab)
return copieTab; // Est-ce que le return suffirait ?
}
In article <4f076843$0$30990$, Samuel DEVULDER wrote:
Le 06/01/2012 21:41, Xavier Roche a écrit :
Le 06/01/2012 21:24, Marc Espie a écrit :
Meme pas sur, strlen() fait partie de la bibliotheque standard, le compilo a parfaitement le droit de detecter si le resultat est constant
Sous GCC/glibc, la fonction est probablement déclarée "pure" (__attribute__ ((pure)) ; <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>)
Mais c'est amha une très mauvaise idée de code comme ça, même si le compilateur rattrape les bêtises derrière.
Ben oui: tu changes de compilo et là mystérieusement ton prog se traine et on va accuser à tord le compilo d'être moins bon alors que c'est la sémantique du programme qui est mauvaise. Et cela d'autant plus qu'un test sur tab[i] tout court (ou !=0) suffit (comme indiqué par d'autres) tout en étant parfaitement dans l'esprit de la représentation des chaines en C.
J'ai jamai dit que c'etait une bonne idee, juste que tu t'avancais beaucoup trop en affirmant que ca aurait de mauvaises performances. :)
In article <4f076843$0$30990$426a34cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> wrote:
Le 06/01/2012 21:41, Xavier Roche a écrit :
Le 06/01/2012 21:24, Marc Espie a écrit :
Meme pas sur, strlen() fait partie de la bibliotheque standard, le compilo
a parfaitement le droit de detecter si le resultat est constant
Sous GCC/glibc, la fonction est probablement déclarée "pure"
(__attribute__ ((pure)) ;
<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>)
Mais c'est amha une très mauvaise idée de code comme ça, même si le
compilateur rattrape les bêtises derrière.
Ben oui: tu changes de compilo et là mystérieusement ton prog se traine
et on va accuser à tord le compilo d'être moins bon alors que c'est
la sémantique du programme qui est mauvaise. Et cela d'autant plus
qu'un test sur tab[i] tout court (ou !=0) suffit (comme indiqué par
d'autres) tout en étant parfaitement dans l'esprit de la représentation
des chaines en C.
J'ai jamai dit que c'etait une bonne idee, juste que tu t'avancais beaucoup
trop en affirmant que ca aurait de mauvaises performances. :)
In article <4f076843$0$30990$, Samuel DEVULDER wrote:
Le 06/01/2012 21:41, Xavier Roche a écrit :
Le 06/01/2012 21:24, Marc Espie a écrit :
Meme pas sur, strlen() fait partie de la bibliotheque standard, le compilo a parfaitement le droit de detecter si le resultat est constant
Sous GCC/glibc, la fonction est probablement déclarée "pure" (__attribute__ ((pure)) ; <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>)
Mais c'est amha une très mauvaise idée de code comme ça, même si le compilateur rattrape les bêtises derrière.
Ben oui: tu changes de compilo et là mystérieusement ton prog se traine et on va accuser à tord le compilo d'être moins bon alors que c'est la sémantique du programme qui est mauvaise. Et cela d'autant plus qu'un test sur tab[i] tout court (ou !=0) suffit (comme indiqué par d'autres) tout en étant parfaitement dans l'esprit de la représentation des chaines en C.
J'ai jamai dit que c'etait une bonne idee, juste que tu t'avancais beaucoup trop en affirmant que ca aurait de mauvaises performances. :)
espie
In article <je7n2t$efu$, Marc wrote:
De toutes facons, de maniere *evidente*, ce qui manque de plus en plus *aujourd'hui* en C, c'est un mecanisme, *quel qu'il soit*, de namespaces.
préfixer tous les noms par un une chaîne commune, c'est un mécanisme qui existe déjà.
Okay, un *Vrai* mecanisme de namespace. Parce que les prefixes de chaine et le preprocesseur, le moins qu'on puisse dire, c'est que ca limite tres faiblement le bordel ambiant...
In article <je7n2t$efu$1@news-rocq.inria.fr>,
Marc <marc.glisse@gmail.com> wrote:
De toutes facons, de maniere *evidente*, ce qui manque de plus en plus
*aujourd'hui* en C, c'est un mecanisme, *quel qu'il soit*, de
namespaces.
préfixer tous les noms par un une chaîne commune, c'est un mécanisme
qui existe déjà.
Okay, un *Vrai* mecanisme de namespace. Parce que les prefixes de chaine
et le preprocesseur, le moins qu'on puisse dire, c'est que ca limite
tres faiblement le bordel ambiant...
De toutes facons, de maniere *evidente*, ce qui manque de plus en plus *aujourd'hui* en C, c'est un mecanisme, *quel qu'il soit*, de namespaces.
préfixer tous les noms par un une chaîne commune, c'est un mécanisme qui existe déjà.
Okay, un *Vrai* mecanisme de namespace. Parce que les prefixes de chaine et le preprocesseur, le moins qu'on puisse dire, c'est que ca limite tres faiblement le bordel ambiant...
Olivier Miakinen
Le 06/01/2012 21:08, Samuel DEVULDER a écrit :
C'est quoi ce « i< Tab[i] » ? Tu voulais peut-être écrire i< strlen(Tab) ?
Nota: C'est pas terrible mettre un strlen() dans la condition de la boucle du point de vu des performances.
Tu as raison, mais chaque chose en son temps. Je crois que l'on part de plus loin qu'un simple problème de performances. Cela dit, j'ai aussi donné un meilleur test.
Nota2: je suis surpris que personne n'ait fait remonter un pb sur:
char lettreTap = "";
Lu trop vite, pas vu...
[...] la mauvaise codeur.
Ça sent pire... ;-)
Le 06/01/2012 21:08, Samuel DEVULDER a écrit :
C'est quoi ce « i< Tab[i] » ? Tu voulais peut-être écrire
i< strlen(Tab) ?
Nota: C'est pas terrible mettre un strlen() dans la condition de la
boucle du point de vu des performances.
Tu as raison, mais chaque chose en son temps. Je crois que l'on part
de plus loin qu'un simple problème de performances. Cela dit, j'ai
aussi donné un meilleur test.
Nota2: je suis surpris que personne n'ait fait remonter un pb sur:
C'est quoi ce « i< Tab[i] » ? Tu voulais peut-être écrire i< strlen(Tab) ?
Nota: C'est pas terrible mettre un strlen() dans la condition de la boucle du point de vu des performances.
Tu as raison, mais chaque chose en son temps. Je crois que l'on part de plus loin qu'un simple problème de performances. Cela dit, j'ai aussi donné un meilleur test.
Nota2: je suis surpris que personne n'ait fait remonter un pb sur:
char lettreTap = "";
Lu trop vite, pas vu...
[...] la mauvaise codeur.
Ça sent pire... ;-)
Antoine Leca
Marc Espie écrivit :
In article <je7n2t$efu$, Marc wrote:
préfixer tous les noms par un une chaîne commune, c'est un mécanisme qui existe déjà.
Okay, un *Vrai* mecanisme de namespace.
Avec héritage multiple, espace virtuel, ce genre de choses ?
OK, je sors...
Antoine
Marc Espie écrivit :
In article <je7n2t$efu$1@news-rocq.inria.fr>, Marc wrote:
préfixer tous les noms par un une chaîne commune, c'est un mécanisme
qui existe déjà.
Okay, un *Vrai* mecanisme de namespace.
Avec héritage multiple, espace virtuel, ce genre de choses ?