2017-02-09 47 views
0

做“串” + 1我最近遇到下面的代码来对堆栈溢出(see the whole post here): -截断通过用C

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

它指定的“00939915” DA值,我觉得这非常反直观。

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

我是一个大一的和做CS入门课程,因此这将是很大的帮助:)

+0

你的课程教材是怎么说的? Google搜索揭示了什么?这些问题之前已经得到解答,所以你应该能够找到答案。 – AntonH

+1

'd'是一个指针,指向由'c'('c [1]')指向的数组中的第二个字符,而'c'指向第一个元素('c [0]')。所以如果你打印'd',自然会从第二个字符开始 – Alex

+2

@AntonH我试着在stackoverflow上找到它,但不知道要搜索什么(即它的名字)。 – aditya

回答

7
char *c = "200939915"; 

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

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

谢谢老兄。我今年夏天做了CS50,你的回答只是帮助我连接点:p – aditya

+1

@aditya也许是因为我也采取了CS50。很高兴我能帮上忙。 –

1

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

2

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

我想你做了这样的事情printf("%s",d);这导致printf的阅读从位置d点和输出的每一个字符开始存储在那里,直到抓到一个'\0'(字符串的结束),然后结束。

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

1

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

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

我认为它应该指向“b” – aditya