30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
1 | |
Порча указателя const char*22.12.2016, 20:23. Показов 1085. Ответов 8
Метки нет (Все метки)
Добрый день.
Может кто-нибудь сказать, какие действия потенциально могут привести к порче указателя const char*? Дело в том, что есть некоторые строки. Они поступают на обработку в метод класса, и по каким-то неведомым для меня причинам во время обработки часть указателей портятся - указывают не на начало строки, а, например, на середину. И соответственно отстаток полученной строки содержит мусор, а программа может завершится сбоем. Код, к сожалению привести не могу, его нужно выдирать из приложения. Если строки содержат \0 на конце, поверх них ничего не записывается, длины сохраняются, передаются в функции как const char*..., то что может приводить к подобным последствиям (по опыту)?
0
|
22.12.2016, 20:23 | |
Ответы с готовыми решениями:
8
Порча указателя при передаче в функцию Чем отличаются объявления const char* и const* char Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" char operator[](unsigned short offset) const; // что означает const? |
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
|
|
22.12.2016, 20:41 | 3 |
ну собственно для этого он и придуман... если ваша "строка" не заканчивается нультерминальным символом, то это не строка, а массив символов и как результат, вы будете вылизать за приделы этого массива используя методы работы со строками., ну а как сдвинуть указатель, вам написали выше
0
|
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
||||||
23.12.2016, 02:43 | 4 | |||||
Это указатель на константу (через этот указатель нельзя изменить строку), но сам указатель не константный, его можно изменять. Передавай строки в функцию как
const char * const (константный указатель на константу), если не скомпилируется, значит, описанная в теме, причина в том, что в функциях изменяются указатели.
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
23.12.2016, 10:05 [ТС] | 5 |
Ясно, учту.
Заметил сейчас непонятную вещь: от компиляции к компиляции меняется результат вывода строк, хотя сам исходный код остается одним и тем же! Как такое возможно? Скомпилировал, запустил - результат хороший. Перекомпилировал, запустил - результат плохой! Перекомпилировал, запустил - результат плохой! Перекомпилировал, запустил - результат хороший...
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
23.12.2016, 10:36 [ТС] | 7 |
0
|
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
|
23.12.2016, 10:45 | 8 |
0
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 455
|
|
23.12.2016, 10:46 | 9 |
[progeR], undefined behavoir
0
|
23.12.2016, 10:46 | |
23.12.2016, 10:46 | |
Помогаю со студенческими работами здесь
9
Ошибка: Cannot convert 'char const[18]' to 'const wchar_t *' Ошибка "значение типа "const char [81]" нельзя использовать для инициализации сущности типа "const unsigned char [61]" Cannot convert 'const wchar_t *' to 'const char *' Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |