2015-04-25 3 views
0

Я написал метод, который преобразует форму CString в const char *:Преобразование формы CString в сопзЬ полукокса *

const char* CAESDlg::ConvertToChar(CString str) { 
    CStringA charstr(str); 
    const char *cstr = (const char *)charstr; 
    return cstr; 
} 

но при попытке поставить его в const char * он не возвращает правильное значение!

const char *test = ConvertToChar(filePath); 
+0

Мы не можем знать, что такое 'CString'. – rwols

+0

Как определяются 'CString' и' CStringA'? – user2079303

+0

при отладке cstr содержит допустимое значение, но в этой строке const char * test = ConvertToChar (filePath); он равен неправильному значению –

ответ

1

Значение charstr уничтожается в конце функции до того, как вызывающий абонент присваивает ее переменной.

Вам не нужна функция, вызывающий может напрямую использовать CStringA и отметить, что test действителен до sFilePathA выходит за рамки.

CStringA sFilePathA(filePath); 
const char *test = sFilePathA; 
1

Не зная CString и CStringA я могу только догадываться, но это, кажется, как будто вы возвращающая указатель на локальную переменную, которая является UB, как только вы доступа к значению точки указатель на.

Если вы хотите использовать CString объект в качестве параметра const char* вы, вероятно, хотите использовать LPCTSTR вместо вашей самостоятельной написанный ConvertToChar функции.

+0

как решить это?! –

+0

@AhmedAli: Существует множество возможностей, в зависимости от того, как вы хотите использовать эту функцию, но лично я предлагаю не использовать 'const char *' вообще, а 'std :: string'. Кстати: вы должны, вероятно, взглянуть на [этот вопрос] (http://stackoverflow.com/questions/859304/convert-cstring-to-const-char) – MikeMB

+0

@AhmedAli: см. Мое редактирование в ответ на информацию в вашем Комментарии. – MikeMB

Смежные вопросы