Указатели 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д