Robi to, ale zauważ, że w momencie gdy kopiujesz do desta to musi on być tego samego rozmiaru co src. Jeżeli nie jest to tak jakbyś wykroczył w tablicy poza jej zakres i próbował wpisywać wartości w nieodpowiednim. Jeżeli nie chcesz by dest miał zawsze tyle samo znaków co src to użyj metody push_back, która będzie umieszczać znaki w stringu automatycznie na koniec. To na podobnej zasadzie co kontenery w C++. Kod więcej Ci wyjaśni:
#include <iostream>
using namespace std;
void stringNcpy(string dest, string src, int len)
{
int i;
for(i = 0; i <= len; i++)
dest[i] = src[i];
dest[++i] = '\0';
for(int j = 0; j<src.length() ; j++)
cout << "dest["<<j<<"] = " << dest[j] << endl;
cout << dest << endl;
}
void stringNcpy2(string dest, string src) // int len nie jest potrzebny
{
for(int i = 0; i < src.length(); i++)
dest.push_back(src[i]);
// znak \0 nie jest potrzebny teraz
for(int j = 0; j<src.length(); j++)
cout << "dest["<<j<<"] = " << dest[j] << endl;
cout << dest << endl;
}
int main()
{
string a="Kasia";
string b="AAAAA";
stringNcpy(b, a, b.size());
cout<<endl;
string c;
stringNcpy2(c, a);
return 0;
}