在C中获取字符串中的最后一个字符时,strlen是否不安全

pig*_*ack 0 c buffer-overflow

有没有办法让我用strlen获取字符串中的最后一个字符?如果没有,我无法理解strlen可以在什么情况下使用.

char buf[256] = "Hello";
char * lastchar = buf[strlen(buf) - 1];
Run Code Online (Sandbox Code Playgroud)

使用它安全吗?

Isk*_*rak 9

如果您的字符串实际上是以空值终止的(否则它们实际上不是字符串!!!),是的,它是安全的,只要字符串中至少有一个字符(终止空值除外).

strlen()计算以null结尾的字符串中的字节数,不包括空终止符.请记住,C使用基于0的索引.

所以"Hello"真的'H', 'e', 'l', 'l', 'o', '\0',strlen("Hello")返回5,所以你正在访问buf[4](the 'o'),这很好.如果您有空字符串,""则没有倒数第二个字符,因此strlen()在使用之前检查返回值非常重要.

一个警告:如果你打算得到最后一个角色,你应该已经完成​​了

char lastchar = buf[strlen(buf) - 1];
Run Code Online (Sandbox Code Playgroud)

如果你想得到一个指向最后一个角色的指针,你应该已经完成​​了

char * lastchar = &buf[strlen(buf) - 1];
Run Code Online (Sandbox Code Playgroud)