Yikes - что за беспорядок. Если a и b являются массивами char, то вы не хотите создавать для них int s ... int - это область памяти, большая чем char, и когда вы читаете, вы выбираете другие значения рядом символ и в конечном итоге с эффективно случайным значением. Если вы попытаетесь сохранить значение в int , вы закроете значение char (возможно, непреднамеренным значением), а несколько значений вокруг него.
Очень хорошая идея не использовать приведение в стиле C (например, "(int *)") при изучении C ++. Если вы используете static_cast <>, компилятор может сообщить вам, когда вы допустили большую ошибку.
Итак, что вы хотите:
char* p_a = &a[0];
char* p_b = &b[0];
*p_a = *p_b; // copy