ваша проблема в этой строке:
codedmessage[strlen(codedmessage)] = '\0';
это может быть
codedmessage[i] = '\0';
или
codedmessage[charcount] = '\0';
или дороже даром
codedmessage[strlen(tocode)] = '\0';
, потому что вы не можете использовать strlen
в codedmessage прежде, чем поставить нулевой символ, заканчивающий его (что вы и пытаетесь сделать), так что вы (возможно, ) переписать 0 точно в той позиции, в которой вы (возможно) его нашли, что может быть вне кодированного сообщения и поведение не определено. В следующей строке printf
записывает символы до тех пор, пока он (возможно) не найдет нулевой символ, поэтому при записи из него неинициализированных символов поведение снова не определено
Исходя из этого, в:
int charcount = strlen(tocode);
char codedmessage[charcount];
for (int i = 0; i < strlen(tocode); i++)
вы знаете, что длина charcount
почему вы звоните strlen(tocode)
каждый ход, зная, что он неизменен и какова его ценность?