возвращение строки

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fucker"ok, 24 Feb 2006.

  1. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    есть функция, которая возращает строку
    Code:
    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)
    Code:
    char str[] = {0x00, 0x00};
    cout << strlen(str);
    
    Вообщем нужно возрвратить строки таким способом (или приобразовать её уже поле возвращения), чтобы можно было потом с ней работать также, если бы я сам назначил char str[] = "helloworld";


    UPD

    Я замутил так:
    Code:
    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);
    }
    
    Проблема решена. Модератор может удалить тему :]
     
    #1 fucker"ok, 24 Feb 2006
    Last edited: 1 Mar 2006
  2. RekRut

    RekRut Elder - Старейшина

    Joined:
    27 Feb 2006
    Messages:
    116
    Likes Received:
    26
    Reputations:
    0
    Вот блин только хотел сказать тебе как сделать как ты уже сам догадался ) :cool:
     
    #2 RekRut, 28 Feb 2006
    Last edited: 28 Feb 2006
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    бугага. давно пора знать что 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

    ахтунг!)
     
    #3 sn0w, 27 Mar 2006
    Last edited: 27 Mar 2006