Quelle est la meilleure façon de trouver de larges maux de tête de chaîne tels que L « % s »?

StackOverflow https://stackoverflow.com/questions/1473183

  •  16-09-2019
  •  | 
  •  

Question

Voici un exemple de l'un des maux de tête que je veux dire:

Nous avons un projet multi-plateforme qui utilise des chaînes Unicode principalement pour le rendu de texte à l'écran. Sur les fenêtres en VC ++ la ligne:

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

et imprime compile bien la grande chaîne dans l'autre grande chaîne. Cependant, cela ne devrait vraiment être:

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

Sans remplacer le « % s » avec « % ls » cela ne fonctionnera pas sur d'autres plates-formes. Comme les tests dans l'environnement Windows est plus facile, plus rapide et beaucoup plus simple de débogage. Ce genre de bugs peut facilement passer inaperçu.

Je sais que la meilleure solution est d'écrire du code correct en premier lieu, mais sous la pression de simples erreurs sont faites, et dans ce cas particulier, l'erreur peut facilement passer inaperçue pendant longtemps.

Je soupçonne qu'il ya beaucoup de variations sur ce genre de bug, que nous sommes encore en profiter.

Quelqu'un at-il une façon agréable et soigné de trouver ce genre de bugs?

: D

Était-ce utile?

La solution

Comme aucune des fonctions de la famille de *printf sont typesafe vous soit

  • recherche d'erreurs probables par des expressions régulières et les corriger manuellement
  • utiliser une autre approche qui est typesafe, peut-être basé sur stringstreams ou boost.format

Autres conseils

Vous pouvez jeter un oeil à FastFormat en cas Boost.Format est trop lent pour vos besoins .

Par rapport à stringstreams et Boost.Format:

  
      
  • iostreams: FastFormat.Format est   plus vite que iostreams, par entre   ~ 100-900%, dans tous les cas
  •   
  • Boost.Format: FastFormat.Format est   plus vite que Boost.Format, par entre   ~ 400-1650%, dans tous les cas
  •   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top