通过做"字符串"来截断C中+ 1

时间:2017-02-09 16:14:44

标签: c char truncate

我最近在堆栈溢出(see the whole post here)上遇到了以下代码: -

char *c = "200939915";
char *d = c + 1;

它指定了一个" 00939915"的值,我觉得这非常违反直觉。

有人可以解释这个过程的机制吗?  这叫什么东西?

我是一名新生并且在做CS入门课程,所以这会有很大的帮助:)。

4 个答案:

答案 0 :(得分:7)

char *c = "200939915";

这里c是一个指向char的指针(200939915的第一个字符)。 c+1将指向下一个字符。

          (2 0 0 9 3 9 9 1 5)
           ^ ^
           | |
           c c+1

答案 1 :(得分:2)

d不会“包含”您所说的价值。 d是指向char的指针,通过将其设置为c+1,它指向(包含内存地址)到您声明的字符串文字的第二个元素。

我猜你做了类似这样的事情printf("%s",d);这导致printf从位置d开始读取内存并输出其中的每个字符,直到它捕获'\0'(结束) ())然后完成。

它不会截断您的字符串,只是在另一个位置开始读取它。

答案 2 :(得分:1)

c [0] = 2 c [1] = 0 c [2] = 0 c [3] = 9 等等。 c是第一个字符2的地址。因此,d是地址c + 1,因此在这种情况下,第一个0的地址。

答案 3 :(得分:1)

正如@Gaurav Sehgal指出的那样,你的变量只指向字符串,而不是数字。你期望d的价值在这里:

 char *c = "abcdefghi";
 char *d = c + 1;