¿Cuál es la mejor manera de encontrar los dolores de cabeza de cuerdas anchas tales como L “% s”?

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

  •  16-09-2019
  •  | 
  •  

Pregunta

Este es un ejemplo de uno de los dolores de cabeza que quiero decir:

Tenemos un proyecto multiplataforma que utiliza cadenas Unicode para la mayoría de la representación de texto a la pantalla. En las ventanas de VC ++ la línea:

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

compila bien e imprime la gran cadena en la otra cadena de ancho. Sin embargo, esta realidad debería ser:

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

sin sustituir el '% s' con un '% ls' esto no funcionará en otras plataformas. Como prueba de nuestro entorno en Windows es más fácil, más rápido, y mucho más fácil de depurar. Este tipo de errores puede fácilmente pasar desapercibido.

Yo sé que la mejor solución es escribir código correcto en el primer lugar, pero bajo la presión se cometen errores simples, y en este caso particular, el error puede fácilmente pasar desapercibida durante mucho tiempo.

Sospecho que hay muchas variaciones en este tipo de error, que todavía tenemos que disfrutar.

¿Alguien tiene una forma agradable y limpio de encontrar este tipo de errores?

: D

¿Fue útil?

Solución

Como ninguna de las funciones de la familia *printf son typesafe que o bien

  • búsqueda de errores probables a través de expresiones regulares y corregirlos manualmente
  • utilizar otro enfoque que es typesafe, tal vez basado en stringstreams o boost.format

Otros consejos

Es posible que desee echar un vistazo a FastFormat en caso de Boost.Format es demasiado lento para sus necesidades .

En comparación con stringstreams y Boost.Format:

  
      
  • iostreams: FastFormat.Format es   más rápido que iostreams, entre un   ~ 100-900%, en todos los casos
  •   
  • Boost.Format: FastFormat.Format es   más rápido que Boost.Format, entre un   ~ 400-1650%, en todos los casos
  •   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top