Char指针等于缓冲区加缓冲区大小?

时间:2015-02-02 22:13:54

标签: c++ c pointers buffer

有人可以向我解释这段代码吗?或者确认一下我的看法?

分配

char *buffer指向"Hello World\0"
 buffer_size是12。

所以:

char *var = buffer + buffer_size - 1;

现在*var指向'd'中的"Hello World",对吗?

2 个答案:

答案 0 :(得分:6)

H e l l o _ W o r l d \0
0 1 2 3 4 5 6 7 8 9 10 11

正如评论中所提到的,您应该像这样初始化buffer

const char *buffer = "Hello World";

然后注意sizeof(buffer)只是指针的大小,而不是字符串的长度。因此buffer_size应初始化为

size_t buffer_size = strlen( buffer ) + 1;

buffer_size设置为12.因此,如果您想要指向d的指针,那么

const char *var = buffer + buffer_size - 2;

var指向buffer[10]

答案 1 :(得分:1)

如果单独使用字符串长度,则指向'd'。

char_pointer + 0指向字符串'h'的开头,+1指向'e',因此+ n指向n + 1个字符。 char_pointer + buffer_size - 1 == 'd'

编辑:仅在buffer_length确定strlen时才会成立,这将11。如果是12,其中包含终止\0,则会指向该内容。

相关问题