gpt4 book ai didi

c - 如何将字符数组中的每个字符转换为整数?

转载 作者:行者123 更新时间:2023-11-30 21:24:18 24 4
gpt4 key购买 nike

我已经尝试了标准方法,但我的答案仍然错误。

我的代码:

int main() {   
int val;
char str[] = {'1', '45', '0'};

val = str[1] - '0';

printf("Int value = %d\n", val);

return(0);
}

我得到的答案是 5 而不是 45

如何解决这个问题?

<小时/>

[更新自comment :]

我实际上需要处理一个字符串数组。假设我想将八进制数转换为十进制,并且我的输入必须采用字符串数组的形式。我希望将这些数字转换为十进制:{45,17,100} 为此,我首先需要提取每个元素并将其更改为整数。您能建议最好的方法是什么吗?

最佳答案

I actually need to process an array of strings

您在此处定义的内容

  char str[] = {'1', '45', '0'};

不是一个字符串数组,而是一个包含 3 个元素的 char 数组。它甚至不是 C 语言“字符串”,因为这需要尾随值为 0。请注意,字符 '0' 的值不是 0,而是,例如,对于 ASCII 字符集,它是 48

'45' 是一个多字节字 rune 字,实际上是一个整数。上面的代码尝试初始化 char 数组 str 的第二个元素 (str[1],它是一个 char) 使用这个非常字面的意思。

这不起作用。

char 不能(必然)保存此字节字 rune 字的 int 值。在这种情况下,str[1] 的初始化溢出,导致 5 的值出现意外。

要查看问题,请尝试以下代码:

#include <limits.h>
#include <stdio.h>


int main(void)
{
char c_min = CHAR_MIN;
char c_max = CHAR_MAX;
unsigned char uc = '45';

printf("'1'=%d\n", '1');
printf("'45'=%d\n", '45');
printf("'0'=%d\n", '0');

printf("lowest possible value for char=%d\n", c_min);
printf("highest possible value for char=%d\n", c_max);

printf("'45' converted to an (unsigned) char=%u\n", uc);

return 0;
}

上面的示例显示了 45 的值在分配给 char 时如何被截断。

根据 C 实现的不同,您将 '45' 转换为 char 甚至可能会引发臭名昭著的未定义行为。这不好。

您似乎想要的是:

  #define ARRAY_SIZE_MAX 3

char * str[ARRAY_SIZE_MAX] = {"1", "45", "0"}; /*. Mind the double quotes. */

这定义了一个由 3 个指向 char 的指针组成的数组,每个指针都指向一个 C 语言“字符串”。

关于c - 如何将字符数组中的每个字符转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38260105/

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