我想在不使用任何函数的情况下找到字符串的最后一个元素。
我的代码似乎可以工作,但我不太确定为什么它会以这种方式工作,并且很高兴输入。
这是代码。
#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
循环中会发生以下情况:
*s
与0
进行比较。s
递增。- 如果比较成功,则退出循环。
当s
到达字符串末尾时,它指向空字符。它会递增以指向 null 之后的字符,然后循环退出。此时:
*s
= null 后面的字符,在您的情况下恰好是字母 O
。
*(s-1)
= 空字符。
*(s-2)
= 字符串中的最后一个字符。
关于c - C 中不使用函数查找字符串的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989503/