gpt4 book ai didi

c++ - 返回 char * 而不是字符串

转载 作者:行者123 更新时间:2023-11-30 17:40:11 25 4
gpt4 key购买 nike

我尝试在这里使用“user434507”的未签名解决方案:

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;
}

最佳答案

c += size-1;

您需要在第一个 while 循环之前使用此行。这两个循环从右向左写入数字。需要它以便从字符串的右端开始写入。

关于c++ - 返回 char * 而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com