|
Модераторы: bsa |
|
arth |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.6.2011 Репутация: нет Всего: нет |
gcc -Wall -o 1 1.c 1.c: In function ‘main’: 1.c:7:1: warning: passing argument 1 of ‘f’ from incompatible pointer type 1.c:3:6: note: expected ‘char *’ but argument is of type ‘char (*)[80]’ Сборка прошла успешно. Программа при сборке работает, просто не могу понять, как правильно передавать указатель на строку в функцию... Что странно, я думал, что правильнее так:
И даже так программа работает, но компилятор выкидывает: gcc -Wall -o "Без имени" "Без имени.c" (в каталоге: .) Без имени.c: In function ‘f’: Без имени.c:3:1: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type /usr/include/stdio.h:361:12: note: expected ‘char * __restrict__’ but argument is of type ‘char **’ Без имени.c: In function ‘main’: Без имени.c:7:1: warning: passing argument 1 of ‘f’ from incompatible pointer type Без имени.c:3:6: note: expected ‘char **’ but argument is of type ‘char (*)[80]’ Сборка прошла успешно. и опять все работает... а при
gcc -Wall -o "Без имени" "Без имени.c" (в каталоге: .) Без имени.c: In function ‘main’: Без имени.c:7:1: warning: passing argument 1 of ‘f’ from incompatible pointer type Без имени.c:3:6: note: expected ‘char **’ but argument is of type ‘char (*)[80]’ Сборка прошла успешно. но тут в Рантайм выдает ошибку "Segmentation fault" Великие гуру) разъясните, пожалуйста, что тут к чему... |
||||||
|
|||||||
maint |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 77 Регистрация: 12.5.2008 Репутация: 1 Всего: 2 |
правильно или
или
|
||||
|
|||||
arth |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.6.2011 Репутация: нет Всего: нет |
Спасибо) точняк, второй вариант мне подходит... а как должна выглядеть функция?
или
? просто я не пойму, строка в моем понимании это char*, тогда указатель на строку ведь должен быть char** ? Это сообщение отредактировал(а) arth - 5.6.2011, 14:55 |
||||||||
|
|||||||||
maint |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 77 Регистрация: 12.5.2008 Репутация: 1 Всего: 2 |
строка это последовательность байт, ограниченная символом '\0'. *a - ссылка на строку. **a - ссылка на массив строк. Т.е в данном случае f(char *) - ее описание для передачи строки в качестве параметра. Второй вариант, это просто длинно написанный первый.
Это сообщение отредактировал(а) maint - 5.6.2011, 15:16 |
|||
|
||||
arth |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.6.2011 Репутация: нет Всего: нет |
если вы про f(k) и f(&k[0]) то... Млин, я почему-то был уверен, что f(k) обязательно будет работать с копией строки... Какая нафиг копия массива) Спасибо! |
|||
|
||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |