| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 
 | wchar_t *DemandeChaineCaracteres() {
	// Déclaration de variable(s)
	size_t dAlloc=0;
	size_t dPosition=0
	wchar_t *pChaine=NULL;
	wchar_t cCaract;
	wchar_t *pt;
 
	// Pour être sûr d'allouer ne serait-ce qu'une chaine vide
	while (1) {
		// Si on a atteint la taille maximale de la chaine de caractères (ce qui arrive la première fois quand dPosition=dAlloc=0)
		if (dPosition == dAlloc) {
			// on réalloue dynamiquement pour l'augmenter (si pChaine=NULL le realloc se comporte comme malloc)
			dAlloc+=50;				// On peut mettre ce 50 en macro plutôt qu'en variable, ça évite de bouffer de la RAM pour que dalle (on dirait que tu bosses chez Micro$oft)...
			wchar_t *tmp=realloc(pChaine, sizeof(*tmp)*dAlloc);
			if (tmp == NULL) {
				free(pChaine);			// Fonctionne même si pChaine est à NULL
				AfficherMessageQuandReallocationNotOkChaineCaracteres(); // Lui il pourrait être sorti de cette fonction pour être mis dans la fonction appelante
				return NULL;
			}
			pChaine=tmp;
 
			// On place/replace le pointeur à la position de la nouvelle chaine
			pt=pChaine + dPosition;
		}
 
 		// Lecture buffer
		cCaract=getwchar();
 
		// Si on a fini, on sort de la boucle (le '\0' sera mis à la fin)
		if (cCaract == '\n' || cCaract == 0) break;
 
		// On insère le caractère lu à la bonne position
		// On avance d'une position
		*pt=cCaract;
		dPostion++;
		pt++;
	}
 
	// La fin de la chaine
	*pt='\0';
	return pChaine;
} | 
Partager