Для правильного вопроса надо знать половину ответа
Указатель на статически определённый массив нельзя изменить.
Вы можете либо определить массив динамически и самостоятельно выделять и освобождать для него память, либо копировать содержимое массива через memcpy/strncpy.
Для правильного вопроса надо знать половину ответа
Размер void стандартом не определён, поэтому поведение операций инкремента/декремента и индекса для указателя типа void* также не определено и зависит от компилятора.
В вашем случае компилятор принял размер void за 1 байт, поэтому v[i] работает с шагом в 1 байт.
ints[i] работает с шагом sizeof(int) байт, то есть 2, 4 или 8 байт, в зависимости от компилятора и целевой системы.
Некоторые компиляторы просто выдадут ошибку при таком использовании указателя с типом void*.
Для правильного вопроса надо знать половину ответа
1. Максимальная длина name зависит от компилятора и системы, под которую будет компилироваться программа. Какой максимальный блок памяти они позволяют выделить, такая и будет максимальная длина (минус 1).
2. Освобождать нужно ту память, которая выделялась динамически. Отдельно элемент name, отдельно саму структуру People. Если память выделялась статически, то и освобождать её не надо.
3. Использование realloc зависит от конкретной реализации. Можно реализовать как с ним, так и без.
Для правильного вопроса надо знать половину ответа
unsigned long - 232-1 = 4'294'967'295
1'073'741'824 * 8 = 8'589'934'592, что больше максимального значения для данного типа.
Используйте unsigned __int64 или unsigned long long, если они есть в вашей системе.
Для правильного вопроса надо знать половину ответа
В том, что вы не удосужились прочитать описание функции fwrite.
Первым параметром должен быть указатель на записываемые данные, вторым - размер единичного элемента данных, а третьим - количество этих элементов.
Для правильного вопроса надо знать половину ответа
//переопределяю массив новыми размерами
a[row][col];
С чего вы сделали такой вывод? Это просто получение значения из массива a по индексам row и col.
Соответственно, массив у вас остаётся размером 1x1 и при записи в несуществующие адреса повреждается стек.
Для правильного вопроса надо знать половину ответа
1. Вы выделили не массив символов, а массив указателей на символы. Соответственно, размер указателя - 8 байт.
2. C не инициализирует память, выделяемую malloc.
Для правильного вопроса надо знать половину ответа
Таблица символов, character table, character set, charset
Зависит, в первую очередь, не от компьютера, а от операционной системы и/или приложения.
Базовый набор - таблица ASCII-128. Раньше для русских символов расширялась до Win-1251 (Windows), CP866 (DOS) или KOI-8R (*NIX).
В современных системах используется Unicode в представлении UTF-16 (Windows) или UTF-8 (Linux).