Posté le 16/07/2015 15:15
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 323 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
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.
{
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.
Citer : Posté le 16/07/2015 15:22 | #
Du coup tu peux m'expliquez ?
Citer : Posté le 16/07/2015 15:25 | #
Avec quelques conventions stupides ( ) :
{
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.
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 ??
Citer : Posté le 16/07/2015 15:28 | #
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).
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 ??
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
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 ..
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.
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)
Citer : Posté le 16/07/2015 15:36 | #
Ç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é).
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)…
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
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
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
Citer : Posté le 16/07/2015 15:40 | #
pour pouvoir tester ton programme je met quoi dans le main ??
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);
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
Citer : Posté le 16/07/2015 15:41 | #
pour pouvoir tester ton programme je met quoi dans le main ??
Ben tu mets une chaîne, tu la copies et tu l'affiches :
int main(void)
{
char *str = "chaine de test";
char *str2 = strdup(str);
puts(str);
puts(str2);
free(str2);
return 0;
}
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