Я пытаюсь использовать неподписанные решение «user434507» здесь:Return символ * вместо строки
C++ performance challenge: integer to std::string conversion
, но вместо этого я хочу, чтобы вернуть символ * и не принимает в строке.
Я играл с ним некоторое время, и это то, что у меня есть, но оно просто ничего не возвращает/мусор. Мое ограниченное знание C и указателя не помогает мне. Я думаю, что я использую malloc правильно, но в его исходном коде он как бы использует внутренний символ * и просто изменил элементы строки и вернул строку. Я подумал, если я выделил через таНос это будет иметь тот же эффект:
char * itostr(unsigned val)
{
const char digit_pairs[201] = {
"00010203040506070809"
"10111213141516171819"
"20212223242526272829"
"30313233343536373839"
"40414243444546474849"
"50515253545556575859"
"60616263646566676869"
"70717273747576777879"
"80818283848586878889"
"90919293949596979899"
};
int size;
if(val>=10000) {
if(val>=10000000) {
if(val>=1000000000) {
size=10;
} else if(val>=100000000) {
size=9;
} else {
size=8;
}
} else {
if(val>=1000000) {
size=7;
} else if(val>=100000) {
size=6;
} else {
size=5;
}
}
} else {
if(val>=100) {
if(val>=1000) {
size=4;
} else {
size=3;
}
} else {
if(val>=10) {
size=2;
} else {
size=1;
}
}
}
char * c = (char *)malloc(size + 1);
c[size] = '\0';
//char* c = &s[size-1];
while(val>=100)
{
int pos = val % 100;
val /= 100;
*(short*)(c-1)=*(short*)(digit_pairs+2*pos);
c-=2;
}
while(val>0)
{
*c--='0' + (val % 10);
val /= 10;
}
return c;
}
Эта линия не находится в перегруженной функции без знака. Но я вижу это в его подписанном. – ParoX
'char * c = & s [size-1];' в неподписанной версии делает то же самое. 'c' начинается с указателя массива' size-1'th. –
Я добавил 'c + = size-1;' перед моим циклом while, и это не помогает. – ParoX