Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > передать размер *char в структуру


Автор: eXa 26.1.2008, 16:32
Как правильно передать размер char* test в структуру?

Код

char* test = " test";
short* len = strlen(test);

struct temp
{
char  t1[len];  // data member may not have variably modified type `CHAR[((unsigned int)((int)strlen(((const char*)test))))]'  чтот непонял..O_o
char  t2[sizeof(test)]; // компилятор пропускает, но получается не то что нужно
char  t3[4]; // так правильно, но мне не подходит((
} temp pack;




Автор: JackYF 26.1.2008, 17:55
замени:
Цитата(eXa @  26.1.2008,  15:32 Найти цитируемый пост)
char* test = " test";

Код

char test[] = "test";

Автор: eXa 26.1.2008, 19:34
Так тоже пробывал...в таком случии если после чар в структуре идёт word, то пишется сначала word , а потом ток чар smile 
Код

char* test = "test";

struct temp
{
char  t1[];
word  t2; 

} temp pack;

strcpy(pack.t1, test);
pack.t2 = 1;


01 00 74 65 73 75

надо))

74 65 73 75 01 00


Автор: JackYF 26.1.2008, 20:09
Цитата(eXa @  26.1.2008,  18:34 Найти цитируемый пост)
char* test = "test";
struct temp
{
char  t1[];
word  t2; 
} temp pack;
strcpy(pack.t1, test);
pack.t2 = 1;

не понял, ты не сделал в этом коде изменения того, что я сказал. Приводи, опять-таки конкретный полный нерабочий код с учётом изменений.

Автор: eXa 26.1.2008, 20:44
поправил... так правильно 
Код

char test[] = "test";
srtuct 
{
CHAR t[sizeof(test)-1];
}

А почему нельзя использывать strlen?

Автор: JackYF 26.1.2008, 21:09
Цитата(eXa @  26.1.2008,  19:44 Найти цитируемый пост)
А почему нельзя использывать strlen?

потому что strlen - функция времени выполнения, а длину нединамических массивов можно указывать только константами.

Автор: archimed7592 26.1.2008, 21:21
Цитата(eXa @  26.1.2008,  20:44 Найти цитируемый пост)
А почему нельзя использывать strlen?

Потому что strlen - ф-ция времени выполнения, а компилятору необходимо вычислить размер структуры на этапе компиляции.

Автор: eXa 26.1.2008, 21:30
ясно, спасиб smile 

Автор: JackYF 26.1.2008, 21:32
 smile 
Цитата(JackYF @  26.1.2008,  20:09 Найти цитируемый пост)
потому что strlen - функция времени выполнения

Цитата(archimed7592 @  26.1.2008,  20:21 Найти цитируемый пост)
Потому что strlen - ф-ция времени выполнения

 smile ...  smile 

Автор: archimed7592 26.1.2008, 21:49
Сорри, я видимо тему открыл и как всегда ответил только полчаса спустя smile.

Автор: JackYF 26.1.2008, 22:08
 smile 
Цитата(archimed7592 @  26.1.2008,  20:49 Найти цитируемый пост)
Сорри, я видимо тему открыл и как всегда ответил только полчаса спустя 

да дело не в этом smile у нас фразы сошлись буквально дословно, не заметил? smile

Автор: archimed7592 27.1.2008, 00:23
Заметил smile. Наверное мозги одинакого работают smile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)