Указатели 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.