1 / 3 / 4
Регистрация: 02.07.2011
Сообщений: 90
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Запись указателя на строку в массив19.08.2011, 15:50. Показов 2281. Ответов 22
Метки нет (Все метки)
Всем привет! Вот у меня проблемка появилась, не знаю, что делать. Помогите пожалуйста!
Есть структура
Вот вызов функции
их приравнять, пишет: incompatible types in assignment of `char*' to `char[40]' . Как решить эту проблемму?
0
|
19.08.2011, 15:50 | |
Ответы с готовыми решениями:
22
Возвращение неконстантного указателя из константного указателя на строку Запись в массив чисел написанных в строку через запятую Проблема с описанием указателя на запись в процедуре Возвращение указателя на соответствующую строку |
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
||||||
19.08.2011, 15:53 | 2 | |||||
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
19.08.2011, 15:54 | 3 |
Используй strcpy, Люк!
2
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
||||||
19.08.2011, 17:58 | 4 | |||||
Можно еще использовать объект типа string.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
19.08.2011, 18:00 | 5 |
germeticus, всё же я полагаю, что человек на чистом С пишет, так что...
0
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
||||||
19.08.2011, 18:34 | 6 | |||||
Если чистый С, то тогда уж так:
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
19.08.2011, 20:53 | 7 |
0
|
Заблокирован
|
||||||
19.08.2011, 21:21 | 8 | |||||
Здесь, как обычно, вам не правильно подсказали! Вы не можете использовать strcpy, так как у вас может быть выход за границу вашего массива, определенного в структуре.
Поэтому правильно будет использовать функцию strncpy Например,
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
19.08.2011, 21:26 | 9 |
Ну уж этот детский сад был всем очевиден, просто корректно промолчали
Сыроежка, учебные программы не должны быть педантичными, начинающий программист может совсем ничего не понять
0
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
||||||
19.08.2011, 21:47 | 10 | |||||
Если быть все же педантичным, то такой код будет побезопасней
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
19.08.2011, 21:53 | 11 |
Да и такой вариант не больно уж подойдет. А как пользователь узнает, что строки обрезанными вышли, поэтому не стоит все усложнять
0
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
|
19.08.2011, 22:01 | 12 |
Я потом написал, про обработку исключения.
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
19.08.2011, 22:09 | 13 |
0
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
||||||
19.08.2011, 22:28 | 14 | |||||
А вот и обработка:
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
20.08.2011, 00:57 | 15 |
Чем это он более безопасный, интересно знать.
Исключение? В каком смысле исключение?
0
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
|
20.08.2011, 01:19 | 16 |
Исключение - проблема, которая может возникнуть при работе программы и приведет к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма.
Сперто из Вики. В данном случае этот термин вполне применим. А код более безопасен, тем, что исключение никак не может возникнуть в рамках этих двух строчек. В предыдущем случае, теоретически могла возникнуть какая-нибудь ошибка вне рамок этих строк, влияющая на их работу. Как-то так, благодарен за въедливые вопросы))))) Если не прав поправьте)
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|||||||||||
20.08.2011, 01:28 | 17 | ||||||||||
Ну ладно, чёрт с ними с исключениями Считать ли данную ситуацию исключением или нет, зависит от разных обстоятельств. Пусть исключения.
Итак, речь о том, что код
0
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
|
20.08.2011, 01:45 | 18 |
уххх)))
1. Мы могли бы перепутать названия. Например массив задавать fullname[Lan], а у нас еще где есть переменная или константа Len. Все бы прекрасно откомпилировалось бы, а вот ошибку бы замучились искать. 2. Константа Len могла бы быть задана не как константа, со всеми вытекающими последствиями. 3. Может возникнуть конфликт переменных вообще говоря. Примерно так. То есть, в случае каких-то ляпов в других местах программы, эти две строчки более устойчивы. Еще раз спасибо)))
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
20.08.2011, 02:11 | 19 |
Ну перепутать-то можно что угодно и где угодно, и ничего от этого не спасает, как показывает практика.
От конфликта имён и "перепутываний" лучше помогают более осмысленные и многословные идентификаторы, в неком выдержанном стиле. А вот в устойчивости я всё равно не уверен. Массив может быть заменён динамическим, тогда sizeof() будет давать размер указателя. Тип элементов массива может измениться с char на wchar_t, к примеру, тогда заменив strncpy на wcsncpy про sizeof() опять же можно и подзабыть. И хотя переполнения в данном случае не произойдёт, но всё-равно, приятного мало. Дело вкуса, короче. Добавлено через 9 минут А, нет, наврал. Как раз в данном случае оно вполне возможно.
1
|
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
|
|
20.08.2011, 02:14 | 20 |
Да, вы правы, код не переносим. Но мы про переносимость и не говорили) Надо еще делить на размер элемента.
0
|
20.08.2011, 02:14 | |
20.08.2011, 02:14 | |
Помогаю со студенческими работами здесь
20
Возврат указателя на строку из фукнции Передача указателя на строку в функцию Вернуть строку в качестве указателя Не выводит строку из-за нулевого указателя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |