Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Help strdup
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Help strdup

Posté le 16/07/2015 15:15

Qui peut me proposez son programme pour cette exercice svp ??

Fichier joint


1, 2, 3 Suivante
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/07/2015 15:20 | #


Facile, mais je suis pas hyper convaincu que de pondre une solution pour toi te fera progresser.

char* strdup(char* src)
{
int i, j;
char* new = NULL;
while(str[i++]); //longueur de la chaîne.

new = malloc(i);

for(j=0; j<i; j++) new[j] = src[j];

return new;
}


Ajouté le 16/07/2015 à 15:21 :
Après c'est sûrement optimisable.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Citer : Posté le 16/07/2015 15:22 | #


Du coup tu peux m'expliquez ?
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 16/07/2015 15:25 | #


Avec quelques conventions stupides ( ) :
char *strdup (char *str)
{
    int i, length = 1;
    char *copy;

    while(str[length]) length++;
    copy = malloc(length);
    if(!copy) return (NULL);

    for(i = 0; i <= length; i++) copy[i] = str[i];
    return (copy);
}

Darks, il te manque l'initialisation de i.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Citer : Posté le 16/07/2015 15:27 | #


leuphe tu peux venir skype mdr vu que jsuis a lecole sa sera mieux pour tester directement ??
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 16/07/2015 15:28 | #


Corpse a écrit :
leuphe tu peux venir skype mdr vu que jsuis a lecole sa sera mieux pour tester directement ??

Il est en cours en plus xD

Désolé, je peux pas me connecter à Skype pour le moment (par contre ce soir y'a une chance).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Citer : Posté le 16/07/2015 15:29 | #


mdr jcomprends pas le malloc la sa me saoul et ton programme est trop compliquez ya plein de chose que je peux pas utilisez tu veux pas me le refaire avec les trucs qu'on utilise d'habtiude ??
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/07/2015 15:30 | #


malloc te donne de la place en mémoire. T'as pas eu un cours dessus ? omg
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Citer : Posté le 16/07/2015 15:32 | #


a lecole 42 tu dois te demerder avec 2 pauvres videos par jours mdr .. ces pour sa que je voulais une explication detailler ..

Ajouté le 16/07/2015 à 15:32 :
a lecole 42 tu dois te demerder avec 2 pauvres videos par jours mdr .. ces pour sa que je voulais une explication detailler ..
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 16/07/2015 15:33 | #


malloc() alloue de la mémoire pour ton programme.
Derrière malloc() il y a un gestionnaire de mémoire qui décide de quelle partie de la mémoire va à quel programme et qui s'arrange pour que personne n'utilise la zone de mémoire qu'il t'a attribuée.

Les variables locales sont stockées dans la pile, les globales et les statiques... ailleurs, et tout ce qui est dynamique (avec malloc(), free() et autres) est placé dans une mémoire appelée heap.

malloc() te donne accès à une partie de cette mémoire, et l'argument c'est la longueur que tu veux. La fonction renvoie l'adresse de la zone mémoire allouée, et tu peux ensuite l'utiliser à loisir. Une fois que tu n'en a plus besoin, tu utilises free(), avec pour argument la valeur de retour de malloc(), pour dire au gestionnaire que tu n'as plus besoin de la mémoire et qu'il peut l'allouer pour autre chose.

Donc ici on alloue un caractère par caractère de la chaîne originale et un de plus pour le NUL à la fin. On ne libère évidemment pas le pointeur puisque le but c'est que le programme qui appelle strdup() puisse s'en servir.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/07/2015 15:35 | #


Ça ne fait que (encore) baisser l'estime que j'ai en 42 ><
Enfin bref, les pointeurs sans une explication de la mémoire, c'est comme apprendre à conduire sans savoir comment fonctionne la voiture x)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 16/07/2015 15:36 | #


Dark storm a écrit :
Ça ne fait que (encore) baisser l'estime que j'ai en 42 ><
Enfin bref, les pointeurs sans une explication de la mémoire, c'est comme apprendre à conduire sans savoir comment fonctionne la voiture x)

Explique-lui la mémoire plutôt... -_-


En gros Corpse, on commence par réserver de la mémoire, et ensuite on copie les données. C'est une simple copie de données d'une zone de la mémoire (le pointeur originel) à une autre zone (le pointeur alloué).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/07/2015 15:37 | #


Tu l'as fait juste au dessus (et pis sur téléphone c'est un peu galere)…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Citer : Posté le 16/07/2015 15:37 | #


Merci leuphe et juste du coup ton lenght je peux le remplacer par ce que je veux hein??

Dark-storm = Pour l'instant ces que les selections ces juste pour savoir si oui ou non tes capables de tenir le rythme de travail et voir comment tu reagis devant l'inconnu mais une fois accepte dans l'ecole sa change completement
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 16/07/2015 15:38 | #


Ben, c'est un nom de variable... Mais bon, c'est plus explicite que celui de Darks, puisque length (le h est à la fin) signifie longueur et que c'est justement ce que je calcule
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/07/2015 15:39 | #


Pour les variables, tu peux mettre Toto ou alligator, ça ne changera rien, sauf pour le gars qui va relire ton code
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Citer : Posté le 16/07/2015 15:40 | #


pour pouvoir tester ton programme je met quoi dans le main ??
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 16/07/2015 15:40 | #


Il ne faut surtout pas oublier de désallouer la mémoire C'est trèèèèès important.

Dans ta fonction, tu n'en as pas besoin mais si quelqu'un l'utilise, la mémoire alloué à copy devra être libéré en faisant par exemple:

char* example = strdup("Ceci est une chaîne qui appartient à Baracudda XD ");

free(example);
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/07/2015 15:41 | #


Une déclaration de chaîne, un pointeur NULL, un appel vers ta fonction, et un printf du pointeur qui n'est plus nul
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 16/07/2015 15:41 | #


Corpse a écrit :
pour pouvoir tester ton programme je met quoi dans le main ??

Ben tu mets une chaîne, tu la copies et tu l'affiches :
#include <stdio.h>

int main(void)
{
    char *str = "chaine de test";
    char *str2 = strdup(str);

    puts(str);
    puts(str2);

    free(str2);
    return 0;
}

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Corpse Hors ligne Banni Points: 31 Défis: 0 Message

Citer : Posté le 16/07/2015 15:41 | #


ah oui leuphe depuis la derniere fois j'ai appris fibonacci, tout les types de str comme strcmp strcat strcpy ect
donc du coup si se soir tu peux passer sur ts ou quoi pour faire un point sa marrangera surtout que demain j'ai un examen
1, 2, 3 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 215 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd