Проще говоря, для экономии памяти - но, пожалуйста, обратите внимание, что объявление этих массивов как char
ограничивает расстояние результата до 127 или 255, в зависимости от того, по умолчанию компилятор C равен signed char
или unsigned char
соответственно.В C char
является целочисленным типом - вам не нужно ord()
, чтобы получить его целочисленное значение.
Ваш исходный код не содержит упоминаний об этом ограничении. Обратите внимание, что если char
переполняется, он делает это тихо, и код выдаст неверные результаты - 127 + 1 -> -128 (подписано);255 + 1 -> 0 (без знака).
Вы не ответили на мой комментарий к своему первоначальному вопросу: "" "Каковы (a) максимальные (b) средние размеры ваших строк?действительно нужно делать все, что нужно (M * N), если две строки не похожи друг на друга? "" "..... Пожалуйста, ответьте сейчас (отредактируйте свой вопрос);если бы вы сделали это тогда, вы бы ответили на этот вопрос.
Обновление: при повторном чтении исходного сообщения я обнаружил проблему: код, который читает
m1, m2 = m2, m1
strcpy( m3, m2 )
,НЕПРАВИЛЬНО по трем причинам: (1) он не перетасовывает строки должным образом (должен сделать strcpy()
перед заменой m1
и m2
) (2) strcpy()
не будет копировать ничего, кроме первого нуля (нулевого байта)(3) не нужно ничего копировать, просто перетасуйте указатели
m3, m2, m1 = m2, m1, m3