¿String::c_str() de C 11 elimina la terminación nula?
En C 11, ya no se garantiza que string::c_str produce una cadena terminada en nulo.
Razón:
En C 11, string::c_str se define como idéntica a string::data, que a su vez se define como equivalente a *(begin() n) para 0
Consecuencias:
Esto implica que string::c_str() ya no puede devolver una cadena terminada en nulo, lo que genera errores potenciales en escenarios que asumen dicha terminación.
Solución:
La solución es usar string::c_str() solo para compatibilidad con código heredado. Para código nuevo, use string::data() en su lugar. Si bien string::data() no devuelve una cadena terminada en nulo, devuelve un puntero al búfer subyacente, que se garantiza que tendrá una terminación nula internamente.
Detalles de implementación:
Internamente, ahora se requiere que las cadenas utilicen buffers terminados en nulo. La definición de operador[] en la sección 21.4.5 requiere que para size()
Notas adicionales:
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3