Указатели Char, передача адреса в функцию - C (СИ)
Формулировка задачи:
в данном случае проблема выглядит следующим образом:
main(void) { char *map, *moves; readFile(map, moves); } readFile(char *map, char *moves) { map = (char*)malloc(over9000); moves = ... //тоже самое, что и выше //перед передачей в функцию по этим указателям находился мусор //после маллоков в map и moves по прежнему тот же мусор..как с этим бороться? }
Решение задачи: «Указатели Char, передача адреса в функцию»
textual
Листинг программы
main(void) { int w,h; char *map; readFile(&map, &w, &h); } void readFile(char **map, int* w, int *h) { int i = 0; *w = 5; // разименовываем *h = 5; // разименовываем *map = (char*)malloc( *w * *h ); // разименовываем char ch; while ((ch = fgetc(input))!=EOF) { (*map)[i] = ch; // указываем приоритет if (i < *w * *h) ++i; // разименовываем else goto err; } }
Объяснение кода листинга программы
- В функции main() объявлены три переменные: w, h и map.
- Переменная w и h инициализируются значением 5.
- Переменная map инициализируется как указатель на char.
- Функция readFile() вызывается с аргументами &map, &w, &h.
- В функции readFile() происходит следующее:
- Переменная i инициализируется значением 0.
- Значения переменных w и h приводятся к типу int, используя оператор разименования (*).
- Выделяется память под массив символов с помощью функции malloc().
- Переменная map приводится к типу char*, используя оператор разименования (()).
- Переменная ch инициализируется значением, возвращаемым функцией fgetc().
- Значение переменной ch присваивается элементу массива map[i].
- Если i меньше значения w*h, то значение i увеличивается на 1.
- Если i равно значению w*h, то выполняется переход к метке err.
- Значение переменной i не увеличивается, если i равно значению w*h.
- Значение переменной i не увеличивается, если i равно значению w*h-1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д