Форум программистов, компьютерный форум CyberForum.ru

const char не инициализируется при объявлении - C++

Восстановить пароль Регистрация
 
 
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 17:04     const char не инициализируется при объявлении #1
Доброго времени суток.
Прошу помощи
есть код
C++
1
2
3
std::string f = "бла-бла-бла";
...
const char* filename = f.c_str();
в режиме Debug все работает. А в Reliase нет.
filename не инициализируется.
Пробовала так:
C++
1
2
3
char* cname;
std::strcpy(cname,f.c_str());
const char *filename = cname;
та же ерунда. причем
сname принимает значение строки f, filename так и остается не инициализорванным и вообще в отладчике пишет:
filename CXX0017: ошибка: не найден символ "filename"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 17:08     const char не инициализируется при объявлении #2
Цитата Сообщение от racushka Посмотреть сообщение
filename не инициализируется.
Откуда видите?
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,308
13.09.2013, 17:13     const char не инициализируется при объявлении #3
А в чем проблема, что не позволяет вместо filename использовать f.c_str() ?
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 17:23  [ТС]     const char не инициализируется при объявлении #4
Цитата Сообщение от CheshireCat Посмотреть сообщение
А в чем проблема, что не позволяет вместо filename использовать f.c_str() ?
Это просто супер!
У меня уже тупняк видимо начался))
Огромное спасибо!!!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 17:29     const char не инициализируется при объявлении #5
racushka, на вопрос про инициализацию filename , пожалуйста, ответьте:
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда видите?
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
13.09.2013, 18:01     const char не инициализируется при объявлении #6
Всё работает и так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
#include <windows.h>
#include<fstream>
using namespace std;
int main(){
SetConsoleCP (1251); SetConsoleOutputCP (1251);
std::string f = "bla-bla-bla!";
const char* filename = f.c_str();
const char* out_cstring = "bla bla bla";
ofstream out_file(filename, ios::out);
out_file<<out_cstring;
out_file.close();
ifstream in_file(filename, ios::in);
string word;
string rezult;
while (in_file >> word){
cout<<word<<endl;
rezult+=word+" ";
}
    cout << "rezult " << rezult << endl;
     in_file.close();
cin.get();   
return 0;
}
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 18:37  [ТС]     const char не инициализируется при объявлении #7
Цитата Сообщение от alsav22 Посмотреть сообщение
racushka, на вопрос про инициализацию filename , пожалуйста, ответьте:
видела в отладчике. но уже все решилось. я просто не использую переменную
хотя почему не работает в релиз не понятно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 18:57     const char не инициализируется при объявлении #8
Цитата Сообщение от racushka Посмотреть сообщение
хотя почему не работает в релиз не понятно
Цитата Сообщение от racushka Посмотреть сообщение
видела в отладчике.
В релиз, в отладчике видели?
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 19:18  [ТС]     const char не инициализируется при объявлении #9
да. не открывался файл в cvLoadImage/ именно в Release. (это open cv)
я пыталась понять в чем дело.
в отладчике только эта переменная не показывалась
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 19:20     const char не инициализируется при объявлении #10
Цитата Сообщение от racushka Посмотреть сообщение
в отладчике только эта переменная не показывалась
Вопрос остался: в отладчике переменную смотрели в релизе?
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 20:19  [ТС]     const char не инициализируется при объявлении #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Вопрос остался: в отладчике переменную смотрели в релизе?
да в отладчике. выше написала.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 20:23     const char не инициализируется при объявлении #12
Цитата Сообщение от racushka Посмотреть сообщение
да в отладчике. выше написала.
А что вы в отладчике, в релизе, хотите увидеть?
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 20:44  [ТС]     const char не инициализируется при объявлении #13
Цитата Сообщение от alsav22 Посмотреть сообщение
А что вы в отладчике, в релизе, хотите увидеть?
Ну вообще я думала, что там ничего не будет показывать. Но показывает все тоже самое что и в debug...

Добавлено через 51 секунду
За исключением, что в дебаге ошибка не вылазила и константа прекрасно инициализировалась. все осталольное также

Добавлено через 15 минут
Теперь новый косяк
C++
1
2
3
4
for(int countTemp = 0; countTemp<NumberTemp; countTemp++)
{
     if (FoundPointsFinish[countTemp].value>=ThresholdVal)
     {...
countTemp показывает какое-то непонятное число...

Добавлено через 16 секунд
тоже в release

Добавлено через 2 минуты
соответственно программа в режиме release не работает. только в режиме debug.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
13.09.2013, 21:01     const char не инициализируется при объявлении #14
Цитата Сообщение от racushka Посмотреть сообщение
соответственно программа в режиме release не работает. только в режиме debug.
Результат работы этой строки:
Цитата Сообщение от racushka Посмотреть сообщение
const char* filename = f.c_str();
можно увидеть хоть так:
C++
1
cout<<filename;
Включая экстрасенсорику: другой вопрос, почему из папки Release не видно этого файла. Посмотрите в проводнике, что происходит. Потом настройки путей.
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 21:34  [ТС]     const char не инициализируется при объявлении #15
Цитата Сообщение от IGPIGP Посмотреть сообщение
Результат работы этой строки:

можно увидеть хоть так:
C++
1
cout<<filename;
Включая экстрасенсорику: другой вопрос, почему из папки Release не видно этого файла. Посмотрите в проводнике, что происходит. Потом настройки путей.
Почему не видно? все видно, после того как я сделала так:
C++
1
cvLoadImage(filenShot.c_str())
с файлом все в порядке.
у меня теперь счетчик в другом месте программы не инициализируется.
т.е. программа никогда не заходит в него в релиз, а в дебаг заходит отлично
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 21:41     const char не инициализируется при объявлении #16
Цитата Сообщение от racushka Посмотреть сообщение
т.е. программа никогда не заходит в него в релиз,
В релиз не используйте отладчик. Он не для релиз предназначен. То что не заходит, значит так компилятор в релиз код оптимизировал, это не значит, что неправильно работает. Не прыгайте с дебаг в релиз, это ничего не даст.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
13.09.2013, 22:11     const char не инициализируется при объявлении #17
Цитата Сообщение от racushka Посмотреть сообщение
std::string f = "бла-бла-бла";
...
const char* filename = f.c_str();
Так вообще никогда не нужно делать. c_str() возвращает указатель на данные используемые непосредственно строкой f, следовательно любое изменение содержимого этой строки может привести к тому, что указатель filename станет недействительным. Простой пример, который выглядит вполне корректным
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <cassert>
 
int main()
{
    std::string s1 = "abc";
    std::string s2 = s1;
 
    const char* p = s2.c_str();
    assert(s2.c_str() == p);   // нормально
 
    s2[0] = '!';               // всего лишь меняем первый символ
    assert(s2.c_str() == p);   // ???
}
На первый взгляд всё нормально. Но, если класс std::string использует стратегию copy-on-write, p будет указывать уже совсем не туда, куда ожидалось. И это далеко не самый коварный пример. Если приходится использовать метод c_str(), то используйте его непорсдественно там, где это необходимо.
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 23:15  [ТС]     const char не инициализируется при объявлении #18
Цитата Сообщение от rangerx Посмотреть сообщение
Так вообще никогда не нужно делать. c_str() возвращает указатель на данные используемые непосредственно строкой f, следовательно любое изменение содержимого этой строки может привести к тому, что указатель filename станет недействительным. Простой пример, который выглядит вполне корректным
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <cassert>
 
int main()
{
    std::string s1 = "abc";
    std::string s2 = s1;
 
    const char* p = s2.c_str();
    assert(s2.c_str() == p);   // нормально
 
    s2[0] = '!';               // всего лишь меняем первый символ
    assert(s2.c_str() == p);   // ???
}
На первый взгляд всё нормально. Но, если класс std::string использует стратегию copy-on-write, p будет указывать уже совсем не туда, куда ожидалось. И это далеко не самый коварный пример. Если приходится использовать метод c_str(), то используйте его непорсдественно там, где это необходимо.
Спасибо. Буду знать.
А что на счет вот этого? Почему так может быть ведь программа не работает в релиз

C++
1
2
3
4
for(int countTemp = 0; countTemp<NumberTemp; countTemp++)
{
     if (FoundPointsFinish[countTemp].value>=ThresholdVal)
     {...
Добавлено через 49 минут
countTemp сразу принимает очень большое значение и соответственно дальше алгоритм не проходит и игнорит весь код в цикле
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 23:19     const char не инициализируется при объявлении #19
Цитата Сообщение от racushka Посмотреть сообщение
countTemp сразу принимает очень большое значение
Прям сразу? Прям сразу, как ему ноль присваивается, так и становится очень большим?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2013, 23:58     const char не инициализируется при объявлении
Еще ссылки по теме:

C++ Invalid conversion from 'char' to 'const char*'
невозможно преобразовать параметр 1 из 'char' в 'const char *' C++
C++ Чем отличаются объявления const char* и const* char

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
13.09.2013, 23:58     const char не инициализируется при объявлении #20
Цитата Сообщение от racushka Посмотреть сообщение
countTemp сразу принимает очень большое значение и соответственно дальше алгоритм не проходит и игнорит весь код в цикле
Ну, сразу countTemp очень большое значение принимать не может... если цикл действительно не выполняется ни разу, то NumberTemp(надеюсь эта переменная типа int) <= 0, и проблему нужно искать совсем в другом месте...
Yandex
Объявления
13.09.2013, 23:58     const char не инициализируется при объявлении
Ответ Создать тему
Опции темы

Текущее время: 20:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru