Initialisation d'un char*, malloc ou pas ? - C - Programmation
Marsh Posté le 20-10-2004 à 15:45:03
La solution 2, puisque dans la 1 tu écris après la fin de la chaine renvoyée par getenv. Par contre, si c'est pour utiliser strncat comme tu le fais, autant utiliser strcat (par contre c'est bien pour strncpy). Et puis sizeof(char) == 1. Et puis faut pas oublier le '\0' final quand tu malloc scorefile. Et puis si tu stockais le retour de getenv dans un pointeur, ça t'eviterais de l'appeler deux fois.
Marsh Posté le 20-10-2004 à 15:47:45
strncpy( scorefile, getenv( "HOME" ), size );
-->
boom
char*)malloc( size );
-->
magnifique ce cast
* sizeof( char )
-->
* 1
char* file = "/.ngstar/scores";
-->
manque un const
-->manque des free
Marsh Posté le 20-10-2004 à 15:54:15
matafan a écrit : La solution 2, puisque dans la 1 tu écris après la fin de la chaine renvoyée par getenv. Par contre, si c'est pour utiliser strncat comme tu le fais, autant utiliser strcat (par contre c'est bien pour strncpy). Et puis sizeof(char) == 1. Et puis faut pas oublier le '\0' final quand tu malloc scorefile. Et puis si tu stockais le retour de getenv dans un pointeur, ça t'eviterais de l'appeler deux fois. |
Ce qui donne
Code :
|
Marsh Posté le 20-10-2004 à 15:56:31
Taz a écrit : strncpy( scorefile, getenv( "HOME" ), size ); |
ok pour le reste, mais pourquoi boom (ça compile et ça marche) ?
Marsh Posté le 20-10-2004 à 16:01:29
on ta aussi dit de pas caster le malloc et size_t ca mange pas de pain
Marsh Posté le 20-10-2004 à 16:09:56
Code :
|
DESCRIPTION |
Taz > Ta remarque sur strncpy correspond à ce que j'ai mis en gras ?
EDIT : pourquoi ne pas caster un malloc ? réponse : http://www.stanford.edu/~blp/writi [...] -cast.html
EDIT2 : et sur le strncpy : http://www.stanford.edu/~blp/writings/clc/strncpy.html
Marsh Posté le 20-10-2004 à 16:23:43
je sais psa ce que ca dis ton truc, mais regarde donc le prototype de malloc et tu veras que ca retourne (bien entendu) un void * qui sert de type générique en c, la conversion est implicite
Marsh Posté le 20-10-2004 à 16:50:00
cris56 a écrit : je sais psa ce que ca dis ton truc, mais regarde donc le prototype de malloc et tu veras que ca retourne (bien entendu) un void * qui sert de type générique en c, la conversion est implicite |
ça dis, en gros, qu'en C il ne faut pas caster, qu'en C++ il faut caster sachant que le malloc en C++ c'est mal.
Marsh Posté le 20-10-2004 à 16:53:15
voila, et en c++ quand on interface avec des modules en c, il me semble qu'il y a extern "C", donc aucune excuse pour utiliser des malloc/free dans du code c++
Marsh Posté le 20-10-2004 à 16:58:42
cris56 a écrit : voila, et en c++ quand on interface avec des modules en c, il me semble qu'il y a extern "C", donc aucune excuse pour utiliser des malloc/free dans du code c++ |
j'ai mis du temps à le trouver celui-là
How should malloc()'s return value be used? |
Quelques trucs en C très pratique
Marsh Posté le 20-10-2004 à 17:06:01
cherches faq + c sur google pages francophones et tu trouveras la meme chose en francais et en plus complet (except les liens *.developpez.com)
Marsh Posté le 20-10-2004 à 15:25:56
Quelle solution vous semble la plus adaptée, sachant que les deux semblent fonctionner ?
---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/