0
我想在這裏使用「user434507」的簽名解決方案:返回的char *而不是字符串
C++ performance challenge: integer to std::string conversion
,而是我希望它返回一個char *而在字符串不能接受。
我一直在玩它一段時間,這是我得到的,但它只是沒有返回任何東西/垃圾 - 我有限的C和指針知識不幫助我。我想我正在使用malloc,但是在他的原始代碼中,好像他使用了一個內部char *,並且只是更改了字符串的元素並返回了字符串。我想如果我通過的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'數組索引。 –
我在我的while循環之前加了'c + = size-1;'並沒有幫助。 – ParoX