С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
#1

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

13.09.2013, 17:04. Просмотров 1087. Ответов 20
Метки нет (Все метки)

Доброго времени суток.
Прошу помощи
есть код
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"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 17:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос const char не инициализируется при объявлении (C++):

Изменяется ли адрес или значение переменной при объявлении ее как const? - C++
При объявлении const у нас значение переменной или адрес переменной не изменяется?

Чем отличаются объявления const char* и const* char - C++
Прошу объяснить мне, чем отличаются объявления const char* и const* char и как объявить: указатель на константный массив символов, ...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" - C++
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include <iostream> template<typename T> inline const T...

char operator[](unsigned short offset) const; // что означает const? - C++
Собстенно вопрос уже озвучен :).

Ошибка: Cannot convert 'char const[18]' to 'const wchar_t *' - C++
Unit1.cpp(59): E2034 Cannot convert 'char const' to 'const wchar_t *' Full parser context Unit1.cpp(55): parsing: void _fastcall...

Cannot convert 'const wchar_t *' to 'const char *' - C++
HMODULE hMod=GetModuleHandle(NULL); if(!hMod) { } HRSRC hRes=FindResource(hMod,"acc.dll",RT_RCDATA); if(!hRes){ } HGLOBAL...

20
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 17:08 #2
Цитата Сообщение от racushka Посмотреть сообщение
filename не инициализируется.
Откуда видите?
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
13.09.2013, 17:13 #3
А в чем проблема, что не позволяет вместо filename использовать f.c_str() ?
1
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 17:23  [ТС] #4
Цитата Сообщение от CheshireCat Посмотреть сообщение
А в чем проблема, что не позволяет вместо filename использовать f.c_str() ?
Это просто супер!
У меня уже тупняк видимо начался))
Огромное спасибо!!!
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 17:29 #5
racushka, на вопрос про инициализацию filename , пожалуйста, ответьте:
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда видите?
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6513 / 3150 / 309
Регистрация: 04.12.2011
Сообщений: 8,720
Записей в блоге: 5
13.09.2013, 18:01 #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;
}
1
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 18:37  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
racushka, на вопрос про инициализацию filename , пожалуйста, ответьте:
видела в отладчике. но уже все решилось. я просто не использую переменную
хотя почему не работает в релиз не понятно
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 18:57 #8
Цитата Сообщение от racushka Посмотреть сообщение
хотя почему не работает в релиз не понятно
Цитата Сообщение от racushka Посмотреть сообщение
видела в отладчике.
В релиз, в отладчике видели?
0
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 19:18  [ТС] #9
да. не открывался файл в cvLoadImage/ именно в Release. (это open cv)
я пыталась понять в чем дело.
в отладчике только эта переменная не показывалась
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 19:20 #10
Цитата Сообщение от racushka Посмотреть сообщение
в отладчике только эта переменная не показывалась
Вопрос остался: в отладчике переменную смотрели в релизе?
0
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 20:19  [ТС] #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Вопрос остался: в отладчике переменную смотрели в релизе?
да в отладчике. выше написала.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 20:23 #12
Цитата Сообщение от racushka Посмотреть сообщение
да в отладчике. выше написала.
А что вы в отладчике, в релизе, хотите увидеть?
0
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 20:44  [ТС] #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.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6513 / 3150 / 309
Регистрация: 04.12.2011
Сообщений: 8,720
Записей в блоге: 5
13.09.2013, 21:01 #14
Цитата Сообщение от racushka Посмотреть сообщение
соответственно программа в режиме release не работает. только в режиме debug.
Результат работы этой строки:
Цитата Сообщение от racushka Посмотреть сообщение
const char* filename = f.c_str();
можно увидеть хоть так:
C++
1
cout<<filename;
Включая экстрасенсорику: другой вопрос, почему из папки Release не видно этого файла. Посмотрите в проводнике, что происходит. Потом настройки путей.
0
racushka
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 40
13.09.2013, 21:34  [ТС] #15
Цитата Сообщение от IGPIGP Посмотреть сообщение
Результат работы этой строки:

можно увидеть хоть так:
C++
1
cout<<filename;
Включая экстрасенсорику: другой вопрос, почему из папки Release не видно этого файла. Посмотрите в проводнике, что происходит. Потом настройки путей.
Почему не видно? все видно, после того как я сделала так:
C++
1
cvLoadImage(filenShot.c_str())
с файлом все в порядке.
у меня теперь счетчик в другом месте программы не инициализируется.
т.е. программа никогда не заходит в него в релиз, а в дебаг заходит отлично
0
13.09.2013, 21:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2013, 21:34
Привет! Вот еще темы с ответами:

Почему при изменении литерала const char* программа падает? - C++
точнее литерала. ладно, если бы выходил за пределы

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' - C++
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

Работа со строками - Invalid conversion from 'char' to 'const char*' - C++
#include &lt;iostream&gt; #include &lt;ctype.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; using namespace std; void poisk(int n, char...

Error: incompatible types in assignment of 'const char [5]' to 'char [10]' - C++
Код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; const int m = 10; class name {


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.