在 C 中增加一个字符

Increment a char in C

我有点不理解在c中增加一个字符。 假设:

char c = 'A';

现在,如果我执行 c+1c 中的值将是 'B'。这可以。 但是为什么当我执行以下操作时:

c = c + argv[1][2]

然后我在 c 中得到了 'r' 为什么?

请假设参数为"in12345",则argv[1][2]等于1

我想做的是一些输入,假设 ABCDEF 是在我从参数以循环方式执行它时接收 BDFHJG。但我不明白为什么以上内容对我不起作用。

为什么它不起作用,我该如何解决?

please suppose that the argument is in12345, then argv[1][2] is equal to 1.

不,不是。它等于 '1',或(假设为 ASCII)49.

'A' (65) + '3' (49) = 'r' (114)

如果要从字符'1'得到整数1,需要进行转换。演员阵容无济于事;一种方法是使用一些算术魔法:

char c = 'A';

const int valToAdd = argv[1][2] - '0';
c = c + valToAdd;

// c is now 66, or `'B'`

但是,这有点 hack,如果 argv[1][2] 不在 '0''9' 范围内,它就会中断。您可以进一步研究从 ASCII 数字中获取整数的最佳(更好?)方法。

'1' 不是数字 1,只是 49,因为它是字符 '1' 的 ASCII 码。

所以您添加的不是 1,而是 49

"in12345"是由字符'i'、'n'、'1'、'2'等组成的字符串。也就是说,例如“1”不是数字。它是一个字符。所以在这个表达式中

c = c + argv[1][2] 

你居然有

c = c + '1'

其中字符 c 添加了字符“1”的内部表示形式,在 ASCII table 中具有值 49

要将字符“1”转换为整数值 1,您可以编写例如

c = c + ( argv[1][2] - '0' ) 

或者只是

c += argv[1][2] - '0'