【问题标题】:Char pointer equal to buffer plus buffer size?字符指针等于缓冲区加上缓冲区大小?
【发布时间】:2015-02-02 22:13:53
【问题描述】:

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

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

所以:

char *var = buffer + buffer_size - 1;

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

【问题讨论】:

  • 这取决于buffer_size的值。
  • 很好 - 在那里添加了尺寸。
  • 在发布问题之前您尝试过吗?
  • buffer 指向'H',buffer+1 指向'e',buffer+10 指向'd',buffer+11(等于var)指向'\0' 和 *var '\0'(并且不指向任何地方)。
  • @robert sizeof 不是 strlen

标签: c++ c pointers buffer


【解决方案1】:
H e l l o _ W o r l d \0
0 1 2 3 4 5 6 7 8 9 10 11

正如 cmets 中提到的,您应该像这样初始化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]

【讨论】:

    【解决方案2】:

    如果单独按字符串长度,它指向'd'。

    char_pointer + 0 指向字符串'h' 的开头,+1 指向'e' 所以+ n 指向n + 1th 字符。 char_pointer + buffer_size - 1 == 'd'!

    编辑:仅当buffer_lengthstrlen 确定时才成立,这将给出11。如果是12,包括终止\0,它将指向那个。

    【讨论】:

    • 你错过了他的- 1 :-p
    • 不。 buffer[12] 指向缓冲区之后的位置,因此buffer[12-1] 指向终结符,请参阅@user3386109 的答案。
    • 哦对了,我回答后他才输入buffer_length。假设我正在处理字符串文字。
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2014-06-10
    • 2022-11-11
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多