Вот код char temp[] = "notepad.exe";//Создали const char*
char* temp = new char[];//Конвентируем в LPTSTR
LPTSTR ltemp = (LPTSTR)temp;//Конвентируем в LPTSTR
На второй строке выбивает ошибку с2372, пробывал изменить имя переменных, бестолку
C/C++
Проблема в с++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
auto tmp = "notepad.txt";
auto ptr = new const char[strlen(tmp) + 1];
ptr = tmp;
puts(ptr);
delete[] ptr;
system("pause > nul");
}
#include <cstring>
using namespace std;
int main() {
auto tmp = "notepad.txt";
auto ptr = new const char[strlen(tmp) + 1];
ptr = tmp;
puts(ptr);
delete[] ptr;
system("pause > nul");
}
char temp[] = "notepad.exe";
окей, создали const char[], зачем-то убрали const, занеся результат в переменную типа char[] - ладно, плохо, но не критично
char* temp = new char[];
какая-то фигня: у нас уже есть переменная temp типа char[], здесь мы его переопределяем, да ещё и с другим типом - syntax error, никаким "конвентированием" тут и не пахнет
даже если написать так:
const char* temp = "notepad.exe";
temp = new char[];
это всё ещё будет полный бред по двум причинам:
- где размер выделяемого массива? syntax error
- предположим, что размер есть, тогда мы теряем строчку "notepad.exe", заменяя указатель на неё указателем на свежесозданный массив - в данном случае не совсем утечка, т. к. теряется строковый литерал, но всё же нехорошо
в общем, прежде чем совать нос в шинапи, следует научиться всё-таки понимать, что ты пишешь
например, конвертирование (через "р", а не через "н", кстати) подразумевает проделывание каких-то операций с содержимым в рантайме
в третьей строке никаких операций не проделывается, а просто меняется тип указателя (да и то вряд ли меняется, по идее char* и LPTSTR это то же самое), значит, это преобразование типов, а не конвертирование
окей, создали const char[], зачем-то убрали const, занеся результат в переменную типа char[] - ладно, плохо, но не критично
char* temp = new char[];
какая-то фигня: у нас уже есть переменная temp типа char[], здесь мы его переопределяем, да ещё и с другим типом - syntax error, никаким "конвентированием" тут и не пахнет
даже если написать так:
const char* temp = "notepad.exe";
temp = new char[];
это всё ещё будет полный бред по двум причинам:
- где размер выделяемого массива? syntax error
- предположим, что размер есть, тогда мы теряем строчку "notepad.exe", заменяя указатель на неё указателем на свежесозданный массив - в данном случае не совсем утечка, т. к. теряется строковый литерал, но всё же нехорошо
в общем, прежде чем совать нос в шинапи, следует научиться всё-таки понимать, что ты пишешь
например, конвертирование (через "р", а не через "н", кстати) подразумевает проделывание каких-то операций с содержимым в рантайме
в третьей строке никаких операций не проделывается, а просто меняется тип указателя (да и то вряд ли меняется, по идее char* и LPTSTR это то же самое), значит, это преобразование типов, а не конвертирование
Похожие вопросы
- Проблемы с сортировкой массива методом пузырька.
- Проблема с указателем в C++
- Проблема с памятью?
- Программирование в C++, проблема с дополнительной функцией.
- Проблема с С++
- Возникла проблема при написании кода (с++). Помогите пожалуйста.
- Код на С++. Проблема в связывании функций
- В чем здесь проблема? Подскажите пж. (структури даних) С++ Спасибо!
- Не открывается прога, подскажите, как решить проблему, см внутри
- Я попробовал сделать мини калькулятор. Но испытываю проблему.
auto ptr = new const char[strlen(tmp) + 1];
ptr = tmp;
Мммм....