La librería usada para este tema es:

#include<string.h>

Existen dos maneras de rellenar una cadena de caracteres

    //Rellenar cadenas
      char palabra1[] = "Angel";
    char palabra2[] = {'A','n','g','e','l'};

    //Imprimir datos
    cout<<palabra1<<endl;
    cout<<palabra2<<endl;

Guardar datos:

cin>>

En este caso a comparación del resto de programas vistos, no se puede utilizar un cin>> ya que en caso de hacer esto solo guardaría hasta encontrar un espacio, perdiendo la información:

    char nombre[20];

    cout<<"Digite su nombre: "; cin>>nombre; 
    //Guarda "Jesús Ángel Martínez Mendoza"

    cout<<nombre;
    //Imprime "Jesús"
gets("...")

De esta manera guarda la información completa, tanto así que roba memoria de más, por lo que para cadenas limitadas no es tan recomendable. Usa memoria que no le pertenece.

    char nombre[20];

    cout<<"Digite su nombre: "; cin>>nombre; 
    //Guarda "Jesús Ángel Martínez Mendoza"

    gets(nombre);
    //Imprime "Jesús Ángel Martínez Mendoza", más allá de lo declarado
cin.getline(nombre,n,'\n');

La mejor manera de guardar un dato considero que es esta, donde nombre es el nombre de la variable, n es el número de elementos, y \n es la condición final (salto de línea).

    char nombre[20];

    cout<<"Digite su nombre: "; 
    cin.getline(nombre,20,'\n');
    cout<<nombre<<endl;

Programa Final

//Cadena de caracteres

#include<iostream>
#include<conio.h>
#include<string.h>

using namespace std; 

int main(){

    char nombre[20];

    cout<<"Digite su nombre: ";
    cin.getline(nombre,20,'\n');
    cout<<nombre<<endl;

    getch();
    return 0;
}