To co napisałeś to straszna bzdura.
int a=0;
cin >> a;
char s[a];
Nie można tak robić w C++. To jest VLA z C, która jako rozszerzenie działa w niektórych kompilatorach w C++ (VLA będzie w C++14).
sizeof
podaje rozmiar typu w bajtach. Ponieważ typy znane są podczas kompilacji, wartość ta jest podstawiana w czasie kompilacji i koniec. Podczas przekazywania do funkcji tablice są konwertowane do wskaźnika na pierwszy element, także s
ma typ char *
- u Ciebie widocznie 8 bajtów. Rozmiar tablicy należy przekazać do funkcji.
Zapomnij i tablicach char
w C++ - do tego jest std::string
. Jeżeli jesteś masochistą i chcesz używać do obsługi napisów tablic char
masz trzy wyjścia:
- użyć statycznego bufora.
- użyć dynamicznego bufora.
- napisać własną klasę do obsługi napisów (strasznie głupie - po to jest
std::string
).