Я в ступоре уже час.
Вообшемто это и проблема.
Есть класс в котором обьявленна
char *fname// ее трогать и изменять нельзя.
в функции есть
char buf[10]="blablabla";
Как присвоить fname=buf?
3d_NOOB
Так ее трогать и изменять нельзя! Как же ее тогда присвоить?
попробуй купить себе какую-нибудь книгу по программированию
strcpy
Та неee...
если я пишу kub.fname="blablabla" все кул но мне нужно вот это бла бла бла слепить из того что мне нужно.
Короче вот
char buf[100]="data/scene/";
//так работает
if(ComboB->isItemSelected(0))
{
kub.fname="data/scene/scene.x";
}
// так не работает
if(ComboB->isItemSelected(1))
{
strcat(buf,"scene2.x"); // тут собираюсь изменять сцену
и сделать это все в цикле так как имена сцен хранятся в масиве char file_name_Scene[100][260];
strcpy(text.str[3],buf);
//sprintf(kub.fname,"%s",buf);
kub.fname=buf;
}
Но это все неважно как сделать
char *а;
char b[10];
как а присвоить б ?
strcpy не рулит пробовал strcpy(kub.fname,buf);// вылет таже беда мож указатель надо или еше канибудь? (
buf проверял хранится что надо на экран выводил.
Went
> Так ее трогать и изменять нельзя! Как же ее тогда присвоить?
Я имел ввиду исправить char *fname на char fname[100] чтобы воспользоватся как раз strcpy незя.
3d_NOOB
> как а присвоить б ?
а указатель, б масив
если ты пишеш а=б, ты в а заносишь адрес памяти где храниться массив данных б. Если б не глобальная переменная, когда ты выходишь из функции, она автоматически удаляеться, и а указывает в никуда.
Нужно для а выделить память, и скопировать данные из участка б в участок куда указывает а.
как насчет просто заюзать string ?)
Zx
> Нужно для а выделить память, и скопировать данные из участка б в участок куда указывает а.
Можно чуть подробнее с кодом плз
char *а=new a[100];
Так имееш ввиду?
Nefes
> как насчет просто заюзать string ?)
Просто пролема в том что класс для зд обьекта писал давно и уже много с ним связанно исправлю там и пол проги исправлять нехотелось бы (
3d_NOOB
> Можно чуть подробнее с кодом плз
> char *а=new a[100];
А это уже лучше не ко мне :)
> попробуй купить себе какую-нибудь книгу по программированию
Наверное так
char *а=new char[100];
и после этого strcpy или memcpy
Если вдруг будеш копировать сюда больше 100 байт, поведение программы непредсказуемо...
Zx
Ок спс попутал чуток new a[100]; ))
100 байт достаточно путь к файлам не длинный.
кхм, юзайте std::string везде, тогда не будете получать затраты на конвертацию char * -> string. В остальных случаях не могу предположить, где могут понадобиться массивы char.
3d_NOOB
> 100 байт достаточно путь к файлам не длинный.
Есть стандартная константа MAX_PATH, пользуйся ей вместо выдумывания максимальных длин.
Есть же strdup.
если char *fname где-то так и объявлено, то я бы сделал так:
{ // блок внутри которого живёт buf
char buf_a[MAX_PATH]={"data/scene/"};
char buf[MX_PATH];
strcpy(buf,buf2);
strcat(buf,"scene2.x");
kub.fname=buf; // мне кажется так должно сработать
// (или в крайнем случае kub.fname=&(buf[0]) )
// тут используем kub
strcpy(buf,buf2);
strcat(buf,"scene3.x");
kub.fname=buf;
// тут опять используем kub
}
Думаю, так:
char buf[10];
char* fname= buf; //присвоили fname=buf;
*fname = 'd'; // эквивалентно buf[0] = 'd';
fname+=7; //передвинули указатель
*fname = 'c'; // эквивалентно buf[7] = 'c';
Тема в архиве.