100分请教 strrchr !

castlooo 2008-08-01 02:08:24

int main(int argc, char* argv[])
{
char string[15];
char *ptr, c = 'r';

strcpy(string, "This is a string");
ptr = strrchr(string, c); // ptr
if (ptr)
printf("The character %c is at position: %d\n", c, ptr-string);
else
printf("The character was not found\n");
return 0;
//The character g is at position: 15

}

帮忙分析下,为什么结果为
The character g is at position: 15
不是找 'r'么 怎么打出来是g?
...全文
260 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cf251Suzsoft 2008-08-01
  • 打赏
  • 举报
回复
數組越界
LUCI-Z 2008-08-01
  • 打赏
  • 举报
回复
谁都是新手过来的把
慢慢学都会厉害的
wangdeqie 2008-08-01
  • 打赏
  • 举报
回复
细心点就好了 ^_^
castlooo 2008-08-01
  • 打赏
  • 举报
回复
是新手 又咋地?
castlooo 2008-08-01
  • 打赏
  • 举报
回复
字符长度为 16
是越界了
改为16 也没问题了
tangyulong1214 2008-08-01
  • 打赏
  • 举报
回复
char string[15];
char *ptr, c = 'r';

strcpy(string, "This is a string");

"This is a string"这个字符串需要超过15个长度的数组来存储!!!

是新手吧?
yyyapple 2008-08-01
  • 打赏
  • 举报
回复
数组尺寸换大点吧
wangdeqie 2008-08-01
  • 打赏
  • 举报
回复
如果还不行,改成char string[20];
yyyapple 2008-08-01
  • 打赏
  • 举报
回复
最有可能是数组越界把"This is a string" 覆盖了变量c的'r'
castlooo 2008-08-01
  • 打赏
  • 举报
回复
bcb 6.0
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <string.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
char string[15];
char *ptr, c = 'r';

strcpy(string, "This is a string");
ptr = strrchr(string, c);
if (ptr)
printf("The character %c is at position: %d\n", c, ptr-string);
else
printf("The character was not found\n");
return 0;
}
//---------------------------------------------------------------------------
// 结果 The character g is at position: 15
  • 打赏
  • 举报
回复
注意,越界了
char string[15];
改为
char string[32];
guzhilei1986 2008-08-01
  • 打赏
  • 举报
回复
o也试了一下,没有问题的。
wangdeqie 2008-08-01
  • 打赏
  • 举报
回复

//是正确的
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char string[15];
char *ptr, c = 'r';

strcpy(string, "This is a string");
ptr = strrchr(string, c); // ptr
if (ptr)
printf("The character %c is at position: %d\n", c, ptr-string);
else
printf("The character was not found\n");
return 0;
//The character g is at position: 15

}
//VC6下运行结果:
The character r is at position: 12
Press any key to continue

netlib 2008-08-01
  • 打赏
  • 举报
回复
我试了一下,我这里返回是12。

char string[15];
char *ptr, c = 'r';

strcpy(string, "This is a string");

这里有溢出,长度超了
yyyapple 2008-08-01
  • 打赏
  • 举报
回复
重新构建一下代码,没问题的

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧