PDA

Просмотр полной версии : возвращение строки


fucker"ok
24.02.2006, 15:49
есть функция, которая возращает строку

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);
}


Проблема решена. Модератор может удалить тему :]

RekRut
28.02.2006, 22:23
Вот блин только хотел сказать тебе как сделать как ты уже сам догадался ) :cool:

sn0w
27.03.2006, 17:46
бугага. давно пора знать что 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

ахтунг!)