Salut !
J’essaye de tester un code du cours sur mon ordi, il ne fonctionne pas. Il s’agit d’entrer une chaine de caractères dans le terminal, de mettre celle-ci dans une chaine de caractères larges, puis de la re convertir en chaine de chars, et de la réafficher dans le terminal (exercice de cours quoi).
Dans le cours, cela correspond à cette partie : Notions avancées -> Les caractères larges -> Les entrées récupérées depuis le terminal -> La fonction wcstombs (lien : https://zestedesavoir.com/tutoriels/755/le-langage-c-1/notions-avancees/les-caracteres-larges/#la-fonction-wcstombs)
Je vous copie bêtement le code d’exemple du cours que j’ai exécuté :
#include <locale.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ligne[255];
if (fgets(ligne, sizeof ligne, stdin) == NULL)
{
perror("fgets");
return EXIT_FAILURE;
}
if (setlocale(LC_CTYPE, "") == NULL)
{
perror("setlocale");
return EXIT_FAILURE;
}
wchar_t ws[sizeof ligne];
if (mbstowcs(ws, ligne, sizeof ligne) == (size_t)-1)
{
perror("mbstowcs");
return EXIT_FAILURE;
}
size_t n = wcstombs(ligne, ws, sizeof ligne);
if (n == (size_t)-1)
{
perror("wcstombs");
return EXIT_FAILURE;
}
printf("%zu multiplet(s) écrit(s) : %s\n", n, ligne);
return 0;
}
Voici ce qu’il produit dans l’exemple du cours :
Élégant
10 multiplet(s) écrit(s) : Élégant
… Et voici ce que cela produit sur mon ordi :
élégant
8 multiplet(s) écrit(s) : 'l'gant
Bien-sûr, la question porte sur le 'é' de "élégant".
Voilà si vous avez des pistes/des idées… Merci beaucoup
(je suis sous windows 11)