Поскольку другие ответы объясняют, что вы обращаетесь к массиву вне пределов и вы назначаете адрес, область действия которого находится только до цикла for.
Переход к основной части вопроса " почему мой массиву указателей на «строки» не изменяется ни один из его адресов, когда ему назначается «строковый» адрес. Почему это назначение не работает? "
Здесь, даже если вы исправили значение индексакак "lines [i] = line;", это не сработает, так как вы назначаете один и тот же адрес каждому символьному указателю.Это потому, что «строка» - это массив символов, а имя массива символов всегда указывает на базу массива.Попробуйте, если вы просто пытаетесь увидеть операцию присваивания.
int main () {
char *lines[MAX_LINES];
char line[MAX_LINES];
for(int i=0;i<MAX_LINES;i++)
{
lines[i]=&line[i];
}