免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zsj_0927
打印 上一主题 下一主题

[C] 怎么获取一个字符串的最后一个字符? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-01-18 15:04 |只看该作者
很多人的代码都不对,没有考虑到字符串为空的情况,可能导致崩溃。

论坛徽章:
0
32 [报告]
发表于 2008-01-18 15:06 |只看该作者
我说话总是欠考虑,我的意思是,首先判断字符串是否为空,为空返回错误。然后判断字符串是否长度为0,为0返回0,像
str[strlen[str] - 1]这种是不对的。

论坛徽章:
0
33 [报告]
发表于 2008-01-18 15:06 |只看该作者
/*
 *  Only for x86 platform
 */

#include <stdio.h>

unsigned char __cdecl GetLastOne(const char *pstr)
{
&nbsp;&nbsp;&nbsp;&nbsp;register unsigned char ucVal = 0;

&nbsp;&nbsp;&nbsp;&nbsp;if ( !pstr ) return 0;

&nbsp;&nbsp;&nbsp;&nbsp;__asm {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov   edi, pstr
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xor   eax,eax
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or    ecx, 0xFFFFFFFF&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repne scasb
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub   edi, 2&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movzx eax, byte ptr[edi]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov   [ucVal], al
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return ucVal;
}

int main(int argc, char *argv[])
{
&nbsp;&nbsp;&nbsp;&nbsp;printf("Last One : %c",GetLastOne("Hi,CU"));&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}

论坛徽章:
0
34 [报告]
发表于 2008-01-18 20:34 |只看该作者
原帖由 cugb_cat 于 2008-1-17 12:19 发表

a[strlen(a) - 1]就是最后一个字符.



不要误导别人。

论坛徽章:
0
35 [报告]
发表于 2008-01-18 20:50 |只看该作者

回复 #34 wangqi0021 的帖子

这样做不对吗?

论坛徽章:
0
36 [报告]
发表于 2008-01-18 21:57 |只看该作者
while (*m) m++;       
        printf("%d", *m);

论坛徽章:
0
37 [报告]
发表于 2008-01-18 22:05 |只看该作者
while (*m) m++;       
        printf("%c", *(--m));

论坛徽章:
0
38 [报告]
发表于 2008-01-18 23:22 |只看该作者
原帖由 scuhkr 于 2008-1-17 12:16 发表

int get_last_char(const char* str, char* res_char)
{
   if(!res_char)
       return -1;
   if(!str && *str==0)
        return -2;
   int last_idx = strlen(str);
   res_char = (  last_idx<1 ? 0 : str[last_idx-1] );

   return 0;
}


普通错误 -10
>int get_last_char(const char* str, char* res_char)

致命错误 -30
>if(!str && *str==0)

逻辑错误 -20
>res_char = (  last_idx<1 ? 0 : str[last_idx-1] );

总分: 40

论坛徽章:
0
39 [报告]
发表于 2008-01-18 23:24 |只看该作者
原帖由 cugb_cat 于 2008-1-17 12:19 发表

a[strlen(a) - 1]就是最后一个字符.


致命错误 -50
总分: 50

论坛徽章:
0
40 [报告]
发表于 2008-01-18 23:26 |只看该作者
原帖由 pcbit 于 2008-1-17 13:38 发表
char get_last_char(char *str)
{
     char *p=str;
     while(*p != '\0')
         p++;
     return *(--p);
}


逻辑错误 -10
> char *p=str;

致命错误 -50
> return *(--p);

总分: 40
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP