Si tengo las dimensiones de una cadena de caracteres...
Código
char cadena1[80]
... e introduzco por ejemplo en cadena1: "El pajaro vuela", el caracter nulo "\0" estaría inmediatamente después de vuela\0 o estaría en la posición 80 de cadena1 por haber definido su tamaño previamente?
PD: Es que en un ejericio me salen datos basura... no se qué estoy haciendo mal.
Os dejo el código. El main ya venía hecho.
Código
#include <iostream> using namespace std; typedef char TCadena []; // Funciones para modificar cadenas de caracteres ---------------------- unsigned longitud (const TCadena cad); void copiar(TCadena destino, const unsigned dim, const TCadena origen, bool& ok); // Copia los caracteres de la cadena origen en la cadena destino de // tamañoo dim. Devuelve false en ok si no tiene capacidad suficiente void agregar_char(TCadena destino, const unsigned dim, const char c, bool& ok); // Agrega el carácter c al final de la cadena destino. // Devuelve ok a false cuando no tiene capacidad suficiente void encadenar(TCadena destino, const unsigned dim, const TCadena origen, bool& ok); // Agrega todos los caracteres de la cadena origen al final de la cadena // destino. Devuelve ok a false cuando no tiene capacidad suficiente //- Programa de prueba ------------------------------------------------- int main(){ setlocale(LC_ALL, "spanish"); char cadena1[80], cadena2[80]; char c; bool ok; cout << "Introducir una cadena:\n"; cin >> ws; cin.getline(cadena1,79); cout << "Introducir un carácter: "; cin >> c; agregar_char(cadena1, 80, c, ok); if(ok){ cout << "Al agregarle el carácter la cadena queda:\n"; cout << cadena1 << endl; } else { cout << "No hay espacio para agregar un carácter\n"; } copiar(cadena2, 80, cadena1, ok); if (ok){ cout << "La cadena copiada es: \n"; cout << cadena2 << endl; } else { cout << "No hay espacio para la copia" << endl; } cout << "Pegando las dos cadenas resulta: \n"; encadenar(cadena2, 80, cadena1, ok); if (ok){ cout << cadena2 << endl << endl; } else { cout << "No hay espacio para encadenar" << endl; } cout<<longitud(cadena2); return 0; } //- Definiciones de funciones ------------------------------------------ unsigned longitud (const TCadena cad){ unsigned pos=0; while (cad[pos]!='\0') ++pos; return pos; } void copiar(TCadena destino, const unsigned dim, const TCadena origen, bool& ok){ if(longitud(origen)<=dim){ ok=true; unsigned i=0; while(origen[i]!='\0'){ destino[i]=origen[i]; ++i; }//end while }else ok=false; } void agregar_char(TCadena destino, const unsigned dim, const char c, bool& ok){ if(longitud(destino)<dim){ destino[longitud(destino)]=c; ok=true; }else ok=false; } void encadenar(TCadena destino, const unsigned dim, const TCadena origen, bool& ok){ if(longitud(origen)>dim-longitud(destino)){ unsigned i=longitud(destino)+1; unsigned pos=0; while(origen[pos]!='\0'){ destino[i]=origen[pos]; ++i; }//end while ok=true; }else ok=false; }