Si tu envoies le nom avec Dsend/Drecv, tu auras la taille. Tu peux alors le copier dans un nouveau buffer ou agrandir le buffer existant avec realloc...
... ou tu peux tout simplement le transmettre avec son caractère nul.
Version imprimable
Si tu envoies le nom avec Dsend/Drecv, tu auras la taille. Tu peux alors le copier dans un nouveau buffer ou agrandir le buffer existant avec realloc...
... ou tu peux tout simplement le transmettre avec son caractère nul.
const modifie le type à sa gauche. sauf s'il n'y en a pas du tout, auquel cas, il modifie le premier à sa droite.
avec const char *p ou char const *p, le char est constant, et l'étoile pointe dessus.
un pointeur constant vers un char s'écrit char *const pUn pointeur constant vers un char constant s'écrit ainsi char const * const pLe commentaire dit doxygen est une manière de remplir un commentaire normal (/* */) de façon à ce que l'outil nommé doxygen puisse générer une documentation (généralement au format web).
Il comprend deux particularités:
- il commence par /** et chaque ligne commence par une *
- il y a certaines balises pour donner des informations supplémentaires: @param, @return, @throws...
Quant à ta question, tes données contiennent des '\0'. (Parce que tu ne peux pas savoir qu'elles n'en contiennent jamais)
Donc tu ne peux faire appel à aucune fonction de chaines de caractères.
Tu ne peux utiliser que le mode pointeur+taille.
Il n'y a aucune valeur particulière que tes données ne peuvent pas contenir, tu n'auras donc pas de valeur balise possible, que ce soit \0 ou une autre.
@leternel merci pour ton explication de const et doxygen (que je n'arrive pas à faire fonctionner avec codeblock enfin c'est un autre problème)
@médinoc effectivement aussi envoyer le \0 est la manière la plus simple de transmettre le nom
du coup je vous remercie tous les deux et tous ceux qui m'ont aidé et je pense loc le sujet vu que mon client et mon serveur fonctionnent sous linux (reste plus qu'à tester sous windows).
P.S médinoc les structures fstat et _fstat sont identiques
et pour la fonction de concaténation dynamique j'ai essayé d'utiliser celle de sambia39 mais à chaque fois que je l'utilise ma taille indiquée par size+1 est inférieure à save_t pourtant je lui passais comme taille strlen(dossier)+strlen(nom)+1 (nom et dossier sont bien des chaines)
pour la fonction de sambia et la tienne @médinoc j'ai trouvé l'erreur il se trouvais que j'essayais de faire ca
du coup il n'acceptais pas je pense que c'est due a la chaine "/home/test/" qui doit être en const car déclarée lors de la compilationCode:concat("/home/test/",nomFichier)
Il me semble carrément que la version qu'on avait postée prenait son char* par pointeur, pour éviter une partie de ce genre de choses (et parce qu'elle ré-allouait le pointeur pour accommoder la longueur supplémentaire).
effectivement ta fonction et celle de sambia prennent des char * mais accepte qu'on leur passe une chaine constante comme ca
en fait il se trouve que j'utilisais comme ça ta fonction (en simplifier)
Code:
1
2
3
4
5
6
7
8 int main{ fct("/home/test/"); } void fct(char * dossier) { char *nomFichier=quelquechose; concat(dossier,nomFichier); }