slt tt le monde je suis un newbie dans la programation. je voudrais creer une fonction permetant de copier une chaine de caracteres dans une autre(je sais que cette fonction existe dans string.h)mais ca ne marche pas.voici le code:
char copiechaine (char chaineoriginale[],char chainecopie[]);
int main(int argc, char *argv[])
{
char *chaine = "Salut",copie[100]={0};
copiechaine(chaine,copie);
printf("%s\n", copie);
system("PAUSE");
return 0;
}
char copiechaine (char chaineoriginale[],char chainecopie[])
{ long i;
for(i=0;chainecopie[i]!=´\0´;i++)/*tant que je n´ai pas atteint la fin
de la chaine originale les valeur de
celle ci vont etre enregistré dans la
copie */
{
chainecopie[i]=chaineoriginale[i];
}
}
Bonjour,
Je pense que c´est une erreur d´inattention
Regarde la ligne ou tu fais ta boucle :
for(i=0;chainecopie[i]!=´\0´;i++)
ce n´est pas chainecopie qui faut mettre mais chaineoriginale, et oui car tu copie chaque caractère de la chaine original dans la nouvelle chaine. Aussi le premier caractère de chainecopie est un 0 (représentant le caractère ´\0´), tu ne copiera rien.
Si tu as d´autres questions n´hésite pas ;) .
2 remarque supplémentaires :
-chainecopie[i]!=´\0´
met des cotes et non pas des anticotes.
-char copiechaine (char chaineoriginale[],char chainecopie[]);
Pourquoi un char en retour alors que tu ne retournes rien ?
D´ailleurs le compilo chez moi ne rale pas, marrant.
Il serait donc plus correct de faire :
void copiechaine (char chaineoriginale[],char chainecopie[]);
et aprés effectivement pourquoi ne pas faire une fonction ce genre :
char[] copiechaine(char chaineoriginale[])
et plus tard avec des pointeurs, quand tu y seras.
il ne faut surtout pas faire une fonction du type :
char* copiechaine(char* chaineoriginale)
Car si la fonction retourne une nouvelle chaine, on ne sait rien dessus : quelle est la taille alloué, par quelle méthode (malloc, new, autre chose ?) , faut-il le désallouer, est-ce que c´est partager, etc...
Donc il faut toujours que l´appelant fournisse aussi l´emplacement pour la nouvelle chaîne.
merci a vous maintenant mon prog marche.
je voudrais aussi savoir ou se trouve le code des fonctions qui sont dans les librairie pour que je puisse mon inspirer
tu peut télécharger sur internet le code source de la GNU libc par exemple, mais c´est assez énorme :
http://ftp.gnu.org/pub/gnu/glibc/glibc-2.6.tar.gz
Mais c´est vrai qu´il peut être intéressant de voir comment sont écrit certaines fonctions quelque fois.
nn moi je veux le code des fonctions "simples" qui se trouve par exemple dans string.h pour que je puisse les etudier
ben oui, c´est bien ça. La libc contient toutes ces fonctions "simples" comme tu dit. Mais elles ne sont pas toutes simples et il y en a énormément.
t´aurai pas un autre lien pour windows parceque .tar.gz c´est pour linux
7zip sait décompresser les .tar.gz
les foncctions que tu recherches sont les emes sous linux et sous windows.
seul les fonctions des entrés/sorties diffèrent, ainsi que la gestion des processus.
winrar permet aussi de décompresser les tar.gz
Sinon tu va sur le site de mingw32 et tu cherche et tu doit pouvoir y trouver la version windows de la libc qu´ils utilisent.
Tu peut aussi télécharger le "visual c++ 2003 toolkit" et l´installer et il contient le code source de la runtime de microsoft. Mais ce code là est moins libre qu´un autre et tu ne peut pas t´en servir pour un de tes projet (sauf avec d´assez grosses restrictions).
pourquoi tout les pros sont sur linux
C´est pas vrai, ils ne le sont pas tous.
Le système d´exploitation que tu utilises dépend beaucoup de tes habitudes de developpeur et d´utilisateur. Par exemple, je ne supporte pas les outils tout intégré que l´on trouve sous windows. Je suis plus a l´aise avec la philosophie: "une tache, un outil". Elle n´existe pas sous window,s je me reporte donc vers linux.
De plus, j´ai aussi besoin de pouvoir avoir access au couche les plus basse de mon systeme d´exploitation pour pouvoir les bidouiller. Je ne peux pas faire cela sous windows non plus.
Tout le monde ne partage pas ce point de vue. Tout le monde n´a pas les meme contraintes que moi.
dans mon cas, j´ai pendant un certain temps programmé sous windows et j´était très heureux avec les environnement tout intégré comme dit godrik. Mais maintenant je suis dans un milieu où tout les outils que je dois utiliser tourne sous linux, donc ´est beaucoup plus pratique de travailler sous linux. Et comme je préfère maitriser correctement un outils qu´approximativement plusieurs, je suis passé entièrement sous linux.
Mais globalement tu peut faire la même chose au niveau programmation ou bidouille du système avec les deux environnement, c´est peut-être juste plus simple sous linux qui est prévu pour.
Je ne suis pas pro mais dans mon cas je tourne sous Windows pour plusieurs raison, d´une car tout les outils dont j´ai besoin me suffise, pour utiliser Visual Studio, pouvoir coder sous DirectX ...etc
Ce qui m´a pas empêché de faire un dual boot avec une Ubuntu car j´aime bien connaitre ce qui se fait un peu partout.
Après beaucoup de ces choix sont personnels comme pour la plus part.
Le truc c´est qu´il faut pas te forcer a allé sous linux pour coder si cet environnement ne te convient pas.
Tu peux faire un sondage sur 100 programmeurs pros tu verras que pas 1 seul utilise les mêmes outils, a les mêmes préférences ..etc
j´ai encore un autre pb mais cette fois c´est avec une autre fonction que je voudrais creer et qui a pour but de retrouver la lettre ´a´ dans le mot ´salut´ et de donner la suite c´est a dire le mot ´alut´ voici le code:
void recherchecaractere(char mot[],char lettre,char suite[]);
int main(int argc, char *argv[])
{char mot[]="salut",suite[100],lettre=´a´;
recherchecaractere(mot,lettre,suite);
system("PAUSE");
return 0;
}
void recherchecaractere(char mot[],char lettre,char suite[])
{
long i,a;
for (i=0;mot[i]!=lettre||mot[i]!=´\0´;i++)
{}
if (mot[i]=lettre)
{
for(a=0;mot[i]!=´\0´;(i++ && a++))
{suite[a]=mot[i];} //c´est pour avoir la suite apres la lettre
printf("la lettre a ete trouvé %s",suite);
}
else
{
printf("la lettre est introuvable");
}
}
Tu as beaucoup d´erreur synthaxique et de sémantique. Je pense que tu poses pas assez les choses sur papier.
Je t´es fait un petit code (qui va être critiqué par tout le monde
void recherchecaractere(char mot[], char lettre, char suite[])
{
// Rechercher la lettre
//
int i = 0;
while(mot[i] != ´\0´)
{
// Si la lettre est trouvé
//
if(mot[i] == lettre)
{
// On copie la suite dans la chaine suite
//
int j = 0;
while(mot[i + j] != ´\0´)
{
suite[j] = mot[i + j];
j++;
}
// On termine la chaine de caractère par un ´\0´ et on part de la fonction
//
suite[j] = ´\0´;
return;
}
i++;
}
// On a pas trouvé la lettre
//
suite[0] = ´\0´;
}
je me suis basé sur ton prototype en essaiant de commenter un peu mais essaie d´écrire sur papier ce que tu veux faire par exemple :
- Tant qu´on trouve pas la lettre on passe à la lettre suivante mais si c´est un ´\0´ alors on part
- Si on trouve la lettre, on copie tout ce qui reste à explorer (c´est à dire jusqu´au ´\0´ du mot) et on part
Exemple bidon ![]()
"qui va être critiqué par tout le monde"
Mais non, pourquoi tu pense ça ...
Par contre, dans ce cas, il y a une possibilité interessante et plus efficace qui consiste à ne pas recopier la chaine de caractère mais à utiliser les propriété des chaines en C pour que suite pointe sur la fin de la chaine qui nous interesse. Je reppart de ton code (captainpatate) mais en corrigeant ce qui doit l´être :
void recherchecaractere(char mot[],char lettre,char suite[]);
int main(int argc, char *argv[])
{
char mot[]="salut",*suite,lettre=´a´;
suite = recherchecaractere(mot,lettre);
system("PAUSE");
return 0;
}
void recherchecaractere(char mot[],char lettre,char suite[])
{
long i,a;
for (i=0;mot[i]!=lettre && mot[i]!=´\0´;i++) //!!! Attention, c´est un ET ici et pas un OU.
{} //c´est pas très beau, mais ça marche, alors pourquoi pas ...
suite = &mot[i]; // je le mets là, pour que même si la chaine n´a pas été trouvée, suite pointe sur quelque chose, à savoir juste le caractère ´\0´ de la chaine.
if (mot[i]==lettre) // == pour tester l´égalité
{
printf("la lettre a ete trouvé %s",suite);
}
else
{
printf("la lettre est introuvable");
}
} // et un dernier croché fermant.
je ne l´ai pas testé, mais ça devrait fonctionner.
"Mais non, pourquoi tu pense ça ..."
Tout simplement car un programmeur aime que son code et que pour lui tout autre code est mauvais :p (ironique)
Sinon ta solution est plus interressante
mais elle est peut être moins intuitive je trouve.
oui, je me demande si captainpatate connait les "char*" (ou les pointeurs en général) et l´utilisation que l´on peut en faire.