A voir également:
- Concaténation de char* avec Visual studio
- Microsoft visual c++ runtime - Guide
- Visual petanque - Télécharger - Sport
- Telecharger fl studio 20 pour pc gratuit complet - Télécharger - Édition & Montage
- Visual paradigm - Télécharger - Gestion de données
- Cam studio - Télécharger - Capture d'écran
2 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
6 juin 2017 à 23:21
6 juin 2017 à 23:21
Bonjour,
Le paramètre de taille attend la taille du buffer, il permet de vérifier que l'on ne met pas plus de caractères que le max.
Le paramètre de taille attend la taille du buffer, il permet de vérifier que l'on ne met pas plus de caractères que le max.
char* concat( char const *article ) { static char const domaine[] = "http://nomdedomaine.fr/"; unsigned lgm = sizeof domaine + strlen( article ); char *result = malloc( lg ); strcpy_s( result , lgm , domaine ); strcat_s( result , lgm , article ); return result; }
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 7 juin 2017 à 11:40
Modifié le 7 juin 2017 à 11:40
Salut,
de plus je ne sais pas quand et comment je suis supposé free le tableau de char result que j'ai malloc au début de la fonction.
idéalement, la fonction qui appelle concat devrait libérer la mémoire une fois qu'elle ne sert plus
je ne trouve pas de solution pour le faire proprement dans Visual Studio, je ne trouve que des codes exemple qui le font avec les "vraies" fonction "originales" du C, et pas celles modifiées par Microsoft.
C'est du C11 standard, https://en.cppreference.com/w/c/string/byte/strcat.
D'ailleurs la doc Microsoft et mes cours de C ne m'aident pas plus, c'est un peu la galère, j'ai passé plusieurs jours sans trouver.
La doc Microsoft est là : https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcat-s-wcscat-s-mbscat-s?redirectedfrom=MSDN&view=msvc-160&viewFallbackFrom=vs-2019
Avec un compilateur supportant ces fonctions, cela a du sens aussi d'utiliser strlen_s() https://en.cppreference.com/w/c/string/byte/strlen
et... de vérifier les valeurs de retour de toutes ces fonctions, pour que cela serve à quelque chose de les utiliser ;-)
Note aussi que selon le standard C11, il faut définir __STDC_WANT_LIB_EXT1__ 1 avant d'inclure string.h pour accéder à ces fonctions et qu'elle ne sont accessibles sur un compilateur donné que si celui-ci définit alors __STDC_LIB_EXT1__.
Dal
de plus je ne sais pas quand et comment je suis supposé free le tableau de char result que j'ai malloc au début de la fonction.
idéalement, la fonction qui appelle concat devrait libérer la mémoire une fois qu'elle ne sert plus
je ne trouve pas de solution pour le faire proprement dans Visual Studio, je ne trouve que des codes exemple qui le font avec les "vraies" fonction "originales" du C, et pas celles modifiées par Microsoft.
C'est du C11 standard, https://en.cppreference.com/w/c/string/byte/strcat.
D'ailleurs la doc Microsoft et mes cours de C ne m'aident pas plus, c'est un peu la galère, j'ai passé plusieurs jours sans trouver.
La doc Microsoft est là : https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcat-s-wcscat-s-mbscat-s?redirectedfrom=MSDN&view=msvc-160&viewFallbackFrom=vs-2019
Avec un compilateur supportant ces fonctions, cela a du sens aussi d'utiliser strlen_s() https://en.cppreference.com/w/c/string/byte/strlen
et... de vérifier les valeurs de retour de toutes ces fonctions, pour que cela serve à quelque chose de les utiliser ;-)
Note aussi que selon le standard C11, il faut définir __STDC_WANT_LIB_EXT1__ 1 avant d'inclure string.h pour accéder à ces fonctions et qu'elle ne sont accessibles sur un compilateur donné que si celui-ci définit alors __STDC_LIB_EXT1__.
#define __STDC_WANT_LIB_EXT1__ 1 #include <string.h> (...) #ifdef __STDC_LIB_EXT1__ /* utiliser strcpy_s, strcat_s, strlen_s */ #else /* non supportées sur ce compilateur */ #endif
Dal
7 juin 2017 à 12:50
merci beaucoup pour le temps que vous avez passé à me répondre, ça marche nickel ! :)