C/C++

Проблема в с++

Вот код char temp[] = "notepad.exe";//Создали const char*
char* temp = new char[];//Конвентируем в LPTSTR
LPTSTR ltemp = (LPTSTR)temp;//Конвентируем в LPTSTR
На второй строке выбивает ошибку с2372, пробывал изменить имя переменных, бестолку
#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");
}
Женя Тишков
Женя Тишков
60 218
Лучший ответ
Эльдар Шамбилов auto tmp = "notepad.txt";
auto ptr = new const char[strlen(tmp) + 1];
ptr = tmp;

Мммм....
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 это то же самое), значит, это преобразование типов, а не конвертирование