当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 指针编程问题 ---- 字符串前端和后端地址大小比较
帖子发表于 : 2015-06-24 10:10 

注册: 2011-08-13 20:03
帖子: 31
送出感谢: 3
接收感谢: 0 次
标题可能说的不清楚,详情如下:

代码:
pstr_end = pstr + strlen(pstr) - 1;
pstr_work = pstr;
debug("pstr_work=0x%lx, pstr_end=0x%lx \n", pstr_work, pstr_end);


pstr指向一个字符串。最后程序的输出是:pstr_work=0x6a3674, pstr_end=0x76

这与我的原意相悖,我开始是认为 pstr_end > pstr_work, 所以请教大家造成这样结果的原因是什么?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 指针编程问题 ---- 字符串前端和后端地址大小比较
帖子发表于 : 2015-06-24 13:36 
头像

注册: 2010-04-02 16:44
帖子: 529
系统: openSUSE 13.2 x64
送出感谢: 2
接收感谢: 11
请贴出完整的程序,并说明在什么平台下。尝试了一下没有什么问题,怀疑是你的pstr指向的不是字符串(末尾没有'\0')。

如下是我的代码:
代码:
void standString(){
    char* pstr = "hello";
    char* pstr_end;
    char* pstr_work;
   
    pstr_end = pstr + strlen(pstr) - 1;
    pstr_work = pstr;
    printf("pstr_work=0x%lx, pstr_end=0x%lx \n", pstr_work, pstr_end);
}

在cygwin gcc 4.9.2 x64下的结果
代码:
pstr_work=0x100403030, pstr_end=0x100403034


_________________
正在建设中的个人博客


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 指针编程问题 ---- 字符串前端和后端地址大小比较
帖子发表于 : 2015-06-24 14:26 

注册: 2011-08-13 20:03
帖子: 31
送出感谢: 3
接收感谢: 0 次
完整代码
代码:
BOOL str_toupper(char *pstr)
{
   char *pstr_work = NULL, pstr_end = NULL;
   
   if(!pstr)
   {
      error("char pointer is null!\n");
      return FALSE;
   }
   
   pstr_end = pstr + strlen(pstr) - 1;
   pstr_work = pstr;
debug("pstr_work=0x%lx, pstr_end=0x%lx \n", pstr_work, pstr_end);
   while(pstr_work <= pstr_end)
   //int len = strlen(pstr);
   //while(len-- > 0)
   {
      *pstr_work = toupper(*pstr_work);
      pstr_work++;
   }
debug("pstr=%s\n", pstr);

   return TRUE;
}


输出:
代码:
[str_toupper]:35: pstr_work=0x6a4324, pstr_end=0x26
[str_toupper]:43: pstr=yes



这个函数是将字符串中的小写转换成大写。系统linux,内核版本3.0.1 处理器是ARM架构的。
还有可以肯定pstr是指向一个字符串,不存在末尾没有'\0',之前这个函数我在其他平台用得很好。
现在我想知道哪些情况会导致出现这样情况,出现这样情况的原因是什么?


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 指针编程问题 ---- 字符串前端和后端地址大小比较
帖子发表于 : 2015-06-24 15:29 

注册: 2011-08-13 20:03
帖子: 31
送出感谢: 3
接收感谢: 0 次
我找到原因了,犯了个低级错误
char *pstr_work = NULL, pstr_end = NULL; 应该改为
char *pstr_work = NULL, *pstr_end = NULL;


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译