我不理解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;
}
答案 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将转到字符串或字符数组的末尾,并且当您使用起始地址减去结束地址时,您将获得字符串长度。 它比使用索引快一点。