Войти
ФлеймФорумПрограммирование

Я в ступоре уже час. char buf[10]="blablabla";char *s; Как присвоить s=buf?

Страницы: 1 2 3 4 Следующая »
#0
13:48, 10 апр 2011

Я в ступоре уже час.
Вообшемто это и проблема.
Есть класс в котором обьявленна
char *fname// ее трогать и изменять  нельзя.
в функции есть
char buf[10]="blablabla";

Как присвоить fname=buf?

#1
13:51, 10 апр 2011

3d_NOOB
Так ее трогать и изменять нельзя! Как же ее тогда присвоить?

#2
13:55, 10 апр 2011

попробуй купить себе какую-нибудь книгу по программированию

strcpy

#3
14:00, 10 апр 2011

Та не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];
как а присвоить б ?

#4
14:04, 10 апр 2011

strcpy не рулит пробовал strcpy(kub.fname,buf);// вылет таже беда мож указатель надо или еше канибудь? (
buf проверял хранится что надо на экран выводил.
Went
> Так ее трогать и изменять нельзя! Как же ее тогда присвоить?
Я имел ввиду исправить char *fname на char fname[100] чтобы воспользоватся как раз strcpy незя.

#5
14:06, 10 апр 2011

3d_NOOB
> как а присвоить б ?
а указатель, б масив
если ты пишеш а=б, ты в а заносишь адрес памяти где храниться массив данных б. Если б не глобальная переменная, когда ты выходишь из функции, она автоматически удаляеться, и а указывает в никуда.
Нужно для а выделить память, и скопировать данные из участка б в участок куда указывает а.

#6
14:10, 10 апр 2011

как насчет просто заюзать string ?)

#7
14:12, 10 апр 2011

Zx
> Нужно для а выделить память, и скопировать данные из участка б в участок куда указывает а.
Можно чуть подробнее с кодом плз
char *а=new a[100];
Так имееш ввиду?

Nefes
> как насчет просто заюзать string ?)
Просто пролема в том что класс для зд обьекта писал давно и уже много с ним связанно исправлю там и пол проги исправлять нехотелось бы (

#8
14:27, 10 апр 2011

3d_NOOB
> Можно чуть подробнее с кодом плз
> char *а=new a[100];
А это уже лучше не ко мне :)

> попробуй купить себе какую-нибудь книгу по программированию
Наверное так
char *а=new char[100];
и после этого strcpy или memcpy
Если вдруг будеш копировать сюда больше 100 байт, поведение программы непредсказуемо...

#9
14:36, 10 апр 2011

Zx
Ок спс попутал чуток new a[100]; ))
100 байт достаточно путь к файлам не длинный.

#10
17:00, 10 апр 2011

кхм, юзайте std::string везде, тогда не будете получать затраты на конвертацию char * -> string. В остальных случаях не могу предположить, где могут понадобиться массивы char.

#11
17:00, 10 апр 2011

3d_NOOB
> 100 байт достаточно путь к файлам не длинный.
Есть стандартная константа MAX_PATH, пользуйся ей вместо выдумывания максимальных длин.

#12
17:44, 10 апр 2011

Есть же strdup.

#13
21:13, 10 апр 2011

если 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

}

#14
21:48, 10 апр 2011

Думаю, так:

char buf[10];
char* fname= buf; //присвоили  fname=buf;

*fname = 'd';  // эквивалентно buf[0] = 'd';
fname+=7;      //передвинули указатель

*fname = 'c';  // эквивалентно buf[7] = 'c';

Страницы: 1 2 3 4 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.