есть функция, которая возращает строку 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); } Проблема решена. Модератор может удалить тему :]
бугага. давно пора знать что 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 ахтунг!)