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);
}
Проблема решена. Модератор может удалить тему :]
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);
}
Проблема решена. Модератор может удалить тему :]