Max longueur de la chaîne à l'aide de scanf -> C ANSI

J'ai:

#define MAX_STR_LEN 100

et je veux mettre en scanf modèle pour que je puisse contrôler la longueur de la chaîne:

scanf("%100[^\n]s",sometext)

J'ai essayé:

scanf("%MAX_STR_LEN[^\n]s",sometext)
scanf("%"MAX_STR_LEN"[^\n]s",sometext)
scanf("%",MAX_STR_LEN,"[^\n]s",sometext)

Et ça ne fonctionne pas. Je veux juste éviter le débordement de la mémoire tampon depuis "sometext" est attribuée avec malloc(MAX_STR_LEN)...

Des idées?

  • Discuté ici.
  • Comment pouvez-vous utiliser MAX_STR_LEN au sein d'une chaîne de format?
  • puisque c'est la stricte norme ANSI C, je n'ai pas vraiment accès à la vraie variable de chaîne. J'ai besoin de le faire: char *somestring et puis malloc...
  • Est probablement trop tard , mais j'ai fait cette fonction uniquement pour résoudre ce problème. github.com/tsw1985/Gscanf
  • Outre les réponses ici, je tiens à souligner que si vous utilisez "%100s" l'allocation doit être 101 octets, donc dans votre exemple, vous avez besoin malloc(MAX_STR_LEN+1), ou "%99s".
InformationsquelleAutor tomdavies | 2013-06-26