2012-08-05 13 views
5

empecé a aprender las cuerdas y funciones de cadena (de un libro), me enteré de funciones como strcpy y strcat y strncat .etcC++: Funciones de cadena sin <cstring>

Así que empecé a practicar el uso en programas sencillos de conseguir un sentido de lo que hacen.

Luego me sorprendí más tarde que en el libro me dice que tengo que usar #include <cstring> para usar todas estas funciones de cadena.

He intentado utilizar las funciones de cadena más de una vez sin incluir <cstring> ¿por qué?

El único archivo de encabezado que incluí fue <iostream> y, sin embargo, pude utilizar las funciones de cadena.

Por favor, alguien me explique por qué las funciones de cadena funcionó sin <cstring> y es necesario que lo incluya para usar las funciones de cadena, y si no son los usos de <cstring>;

+1

¿Qué compilador estás usando? Además, será mejor que estudies 'std :: string' y clases relacionadas. Manipular 'char *' s no es algo que deba hacer muy a menudo en C++. – Mat

+0

Estoy usando Microsoft Visual C++ 2010 Express –

Respuesta

4

En primer lugar, es absolutamente necesario considerar cambiar a std::string. La asignación de memoria manual, aunque es una tarea interesante y, a veces, desafiante, no debe formar parte de su trabajo diario.

Habiendo dicho eso, probablemente el # <cstring> fue # incluido por algún otro encabezado que está utilizando en su proyecto. Sin embargo, es mejor no depender de los otros encabezados, incluido <cstring> (nadie garantiza que lo harán siempre y para cada compilador), e incluirlo cuando corresponda.

+0

Todavía soy nuevo en C++ y aún no he aprendido sobre std :: string –

+0

También mi programa es un programa simple que hace 2 cadenas y las copia una a la otra y luego las saca. Nada lujoso –

+1

@Mohamed: std :: string es realmente la forma correcta de manipulación de cadenas de C++ – Vlad

2

Con toda probabilidad, su versión de biblioteca estándar de C++ implementa algunas funciones de iostream con c funciones de biblioteca estándar que se encuentran en cstring. Por lo tanto, cuando incluye el archivo de encabezado iostream, tendrá una directiva #include que le brinda cstring.

4

No es necesario que incluya <cstring> porque está incluido en iostream.

Sin embargo tenga en cuenta que la función que está hablando (strcpy, strcat, strncat) son función C teniendo char * y tienen sus equivalentes en C++ trabajar con el más conveniente std::string.

strcpy: std::string::operator=

std::string str2; 
std::string str1 = str2; // copy str2 in str1 

strcat: std::string::operator+=

str1 += str2; // concat str2 to str1 

strncat:

str1 += str2.substr(0,n); // concat the first n characters of str2 to str1 
3

Eso simplemente significa que <cstring> se incluyó por <iostream>. Cuando incluyó <iostream> también implícitamente incluyó <cstring> a través de él.

Tenga en cuenta que generalmente no se garantiza que <cstring> esté incluido en <iostream>. Tuviste suerte de que tu implementación específica tuviera esa inclusión. En una implementación diferente que podría no ser el caso.

Cuestiones relacionadas