Je rencontre un problème lors de l'utilisation de la longueur de chaîne exacte,% Ns, du modificateur de format dans sscanf. Lorsque le buff contient O 5 hello R 700
, le code fonctionne correctement. mais quand j'essaye d'avoir un espace dans le champ de nom cela ne fonctionne pas. c'est-à-dire, quand le buff contient O 6 h ello R 700
il échoue. il fait name
contiennent "h" et des drapeaux contiennent "ello" au lieu de name
contenant "h ello"C sscanf longueur exacte
// buff will contain something in the format of "O <name_length> <name> <flags> <mode>"
int namelen;
char name[BUFFSIZE];
char flags[BUFFSIZE];
char mode[20];
sscanf(buff, "O %d", &namelen);
char extractor[BUFFSIZE];
sprintf(extractor, "O %%d %%%ds %%s %%s", namelen);
sscanf(buff, extractor, &namelen, name, flags, mode);
agréable. tout ce que je devais changer était 'name [namelen + 1]' juste 'name [namelen]' et ça a fonctionné parfaitement. et vous m'avez appris% * d et% n. Merci beaucoup. –