Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

24.02.2006, 15:49
|
|
Познавший АНТИЧАТ
Регистрация: 21.11.2004
Сообщений: 1,137
Провел на форуме: 2487541
Репутация:
761
|
|
возвращение строки
есть функция, которая возращает строку
Код:
char* f()
{
static char str[] = "helloworld";
return str;
}
char* str = f();
cout << str << sizeof(str);
При такой функции строка выводится как надо, но sizeof(str) = 4 байта. (долго думал почему 4... только догадки)
А мне нужно от sizeof(str) получить 10 байт (строка "helloworld" = 10 байтам)
Конечно можно воспользоватся strlen, скажете вы, но этот способ мне не подходит потому-что strlen как я понял игнорирует символы типа 0x00 и тд, а мне это очень важно.
Тоесть вывод такого будет 0 (а sizeof() = 2)
Код:
char str[] = {0x00, 0x00};
cout << strlen(str);
Вообщем нужно возрвратить строки таким способом (или приобразовать её уже поле возвращения), чтобы можно было потом с ней работать также, если бы я сам назначил char str[] = "helloworld";
UPD
Я замутил так:
Код:
char* f(int &size)
{
char s1[] = "hello world";
size = sizeof(s1);
char* pResult = new char[size];
return pResult;
}
int main()
{
int size = 0;
char *p = f(size);
char str[size];
memcpy(&str, p, sizeof(str));
delete p;
cout << str <<" " << sizeof(str);
}
Проблема решена. Модератор может удалить тему :]
Последний раз редактировалось fucker"ok; 01.03.2006 в 20:18..
Причина: проблема отпала
|
|
|

28.02.2006, 22:23
|
|
Участник форума
Регистрация: 27.02.2006
Сообщений: 261
Провел на форуме: 515774
Репутация:
71
|
|
Вот блин только хотел сказать тебе как сделать как ты уже сам догадался ) 
Последний раз редактировалось RekRut; 28.02.2006 в 22:26..
|
|
|

27.03.2006, 17:46
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
бугага. давно пора знать что char *str - это указатель. а указатель любого типа int char и тд всегда имеет размер 4 байт. физически указатель - это переменная, хранящая в своих 4 байтах адрес реального элемента в 32х разрядном адресном пространстве. (иа64 не трогаю пока =))
char *sPtr;
char sArray[] = "Hello";
sPtr = (char*)malloc(1024); // выделение 1024 байт и запись в sPtr адреса начала 1024 байтного блока в адресном пространстве.
sizeof(sArray) = 6 ( 5+NULL char)
sizeof(sPtr) = 4
ахтунг!)
__________________
 
snow white world wide
Последний раз редактировалось sn0w; 27.03.2006 в 17:55..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|