gpt4 book ai didi

ios - 奇怪的 atoi(char *) 问题

转载 作者:可可西里 更新时间:2023-11-01 06:25:00 25 4
gpt4 key购买 nike

我在使用 atoi(char *) 时遇到了一个非常奇怪的问题。我正在尝试将一个 char 转换成它的数字表示形式(我知道它是一个数字),它在 98.04% 的时间里工作得很好,但它会给我一个随机值,另一个是 1.96 % 的时间。

这是我用来测试它的代码:

int increment = 0, repetitions = 10000000;
for(int i = 0; i < repetitions; i++)
{
char randomNumber = (char)rand()%10 + 48;
int firstAtoi = atoi(&randomNumber);
int secondAtoi = atoi(&randomNumber);
if(firstAtoi != secondAtoi)NSLog(@"First: %d - Second: %d", firstAtoi, secondAtoi);
if(firstAtoi > 9 || firstAtoi < 0)
{
increment++;
NSLog(@"First Atoi: %d", firstAtoi);
}
}
NSLog(@"Ratio Percentage: %.2f", 100.0f * (float)increment/(float)repetitions);

我在 XCode 4.6.1 中使用 GNU99 C 语言方言。第一个 if(当第一个数字不等于第二个数字时)从不记录,所以两个 atoi 每次都返回相同的结果,但是,结果每次都不同。 “不正确的结果”似乎在 -1000 到 10000 之间。我没有看到任何高于 9999 或低于 -999 的。

请让我知道我做错了什么。


编辑:

我现在将角色设计更改为:

char numberChar = (char)rand()%10 + 48;
char randomNumber[2];
randomNumber[0] = numberChar;
randomNumber[1] = 0;

但是,我正在使用:

MAX(MIN((int)(myCharacter - '0'), 9), 0)

获取整数值。

非常感谢所有的回答!

最佳答案

atoi 需要一个字符串。你没有给它一个字符串,你给了它一个 char。字符串被定义为由空字符结束的一些字符。您正在调用 UB。

来自文档:

If str does not point to a valid C-string, or if the converted value would be out of the range of values representable by an int, it causes undefined behavior.

想要将一个字符“转换”为它的整数表示?不要使事情过于复杂;

int x = some_char;

A char 已经是整数,不是字符串。不要将单个 char 视为文本。

关于ios - 奇怪的 atoi(char *) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961632/

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