c - C 中不使用函数查找字符串的最后一个字符

标签 c arrays string pointers


我想在不使用任何函数的情况下找到字符串的最后一个元素。
我的代码似乎可以工作,但我不太确定为什么它会以这种方式工作,并且很高兴输入。
这是代码。

#include <stdio.h>

char *find_last(char *s);

int main(void)
{
    char string[] = {"This is an Example"};
    find_last(string);
    return 0;
}

char *find_last(char *s)
{
/*  char last;*/
    while (*s++ != 0) {}
    printf("*s ist %c", *(s-2));
    return 0;
}

我不明白为什么我必须打印 *(s-2) 而不是 *(s-1) 才能获取最后一个字符。 (为了获得更多的字符,我只需再减少一个字符,即 *(s-3))。

哦,此外,似乎 *s 的内容似乎是字母 O(直到现在我都误认为零),与测试的示例字符串无关。这是为什么?我认为它应该为零 (0),因为我递增指针直到它达到二进制零。

感谢您的帮助!

最佳答案

由于 ++ 是后递增运算符,因此 while 循环中会发生以下情况:

  1. *s0 进行比较。
  2. s 递增。
  3. 如果比较成功,则退出循环。

s到达字符串末尾时,它指向空字符。它会递增以指向 null 之后的字符,然后循环退出。此时:

*s = null 后面的字符,在您的情况下恰好是字母 O

*(s-1) = 空字符。

*(s-2) = 字符串中的最后一个字符。

关于c - C 中不使用函数查找字符串的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989503/

相关文章:

java - 如何在循环中自动输出字符串

c++ - 仅包含 RGB 565 红色分量的图像

c - 将结构传递给回调函数

c - 当信号到达时线程是否继续执行?

c++ - 二维动态字符数组cpp

java - 如何用不同的字符串替换字符串中的特定字符?

C 无限循环中的客户端/服务器失败

javascript - 如果我使用 Delete,如何在 Javascript 中计算数组中的所有值

JAVA替换一个String,无需多次替换

java - 我收到 java.lang.ClassCastException 但我发送的是对象,而不是字符串