指针减法strlen

时间:2018-06-12 00:16:34

标签: c

我不理解sstrlen的最后一行,return t-str; str指向"my string"t指向\0,为什么会有效?

#include <stdio.h>

size_t sstrlen(char *str){
    char *t = str;
    for(;*t != '\0';t++);
    return t-str; // how does it work?
}

int main()
{
    char *str = "my string";
    printf("%zu",sstrlen(str));     
    return 0;
}

2 个答案:

答案 0 :(得分:5)

sizeof(char)定义为始终为1。来自C99:

  

当应用于具有char,unsigned char或signed char(或其限定版本)类型的操作数时,结果为1.

假设m的{​​{1}}字符存储在my string的内存位置。数组总是连续的。

100

100 --> m <-- t and str point to here 101 --> y 102 --> (space) 103 --> s 104 --> t 105 --> r 106 --> i 107 --> n 108 --> g 109 --> \0 <-- end of for loop t points to here 指向的地址100 str指向的减法地址109会导致t。这就是它的工作原理。

答案 1 :(得分:0)

那用来知道字符串的长度...... 因为while循环t将转到字符串或字符数组的末尾,并且当您使用起始地址减去结束地址时,您将获得字符串长度。 它比使用索引快一点。