[ad_1]
Le code suivant :
#include <stdio.h> int main(void) { char buf[80] = "salam"; const char *fmt = "\"%79[^\"]\""; int n; n = sscanf("\"\"", fmt, buf); printf("%d fields were read. buf = '%s'\n", n, buf); n = sscanf("\"hamidi\"", fmt, buf); printf("%d fields were read. buf = '%s'\n", n, buf); }
les sorties:
0 champs ont été lus. buf=”salam”
1 champs ont été lus. buf=”hamidi”
Cela indique que la fonction sscanf ne peut pas lire les chaînes vides avec la chaîne de format spécifiée. Existe-t-il un bon remplacement pour la chaîne au format regex pour lire les chaînes d’une longueur ZÉRO jusqu’à 79 caractères au maximum par la fonction sscanf ? En d’autres termes, je m’attends à ce que le premier sscanf insère ‘\0’ à buf[0] et renvoie 1 au lieu de 0. Existe-t-il un moyen ?
Ce que j’ai essayé :
C’est juste une question. Ce n’est pas quelque chose que je dois essayer.
Solution 1
Une meilleure option serait d’utiliser fgets[^]. Il inclut le caractère de nouvelle ligne qui est lu mais qui peut être facilement supprimé avec une fonction comme celle-ci :
void StripChar( char * buffer, int chr ) { char * p = strchr( buffer, chr ); if( p ) * p = 0; }
Voici un petit échantillon :
#define BUFFER_SIZE 79 char buffer[ BUFFER_SIZE + 1 ] = { 0 }; fgets( buffer, BUFFER_SIZE, stdin ); StripChar( buffer, '\n' );
[ad_2]
コメント