用char数组求和int

时间:2018-08-27 20:15:04

标签: c arrays string sum

在检查一些现有代码时,我碰到了这一行:

char *s = malloc(SIZE);
scanf("%s", s);
char *y = s + strlen(s);

假设scanf()函数成功,将整数添加到char数组是什么意思?

我的期望是得到一个包含s内容的新字符串和另一个具有整数(或至少是原始字符串)的ASCII码的字符。

通过调试此代码,似乎在操作之后y=""

对此行为的解释是什么?

2 个答案:

答案 0 :(得分:5)

以数组索引操作而不是指针算术的形式编写代码可能更清楚。

int n;
char* y = s + n;
char* y = &s[n];

这两种形式是等效的。 s是数组中第一个元素的地址。向其添加一个将为您提供数组中下一个元素的地址,依此类推。假定数组足够大,则两个表达式都求值到数组中第n个元素的地址。在这种情况下,y指向字符串末尾的空终止符。

答案 1 :(得分:2)

strlen(s)查找字符串的长度,该长度也恰好是终止\0字符的索引。

向指针添加整数会找到一个指针,该指针就是内存中还有很多元素。因此,表达式s + strlen(s)s的长度添加到指针值。这意味着它将计算一个指向\0字符的指针。

一种等效的方法,可能更为简洁

char *y = strchr(s, '\0');