Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   возвращение строки (https://forum.antichat.xyz/showthread.php?t=14969)

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

ахтунг!)


Время: 21:52