免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2817 | 回复: 11
打印 上一主题 下一主题

各位都进来看看 while循环的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-07 21:58 |只看该作者 |倒序浏览
本帖最后由 tlocean 于 2010-10-07 22:09 编辑

源代码 如下:
环境:ubuntu + gcc

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void my()
{
    char s[] = "我是中国人/测试用/abcdefghijkl/[测试用]";
    char *my_p = NULL;
    const char *delim = "/";
    char *pointer;


    my_p = strtok(s,delim);
    printf("______%s______this is the first_time!\n",my_p);

    while(pointer != NULL)
    {
              strcat(my_p,pointer);
              pointer = strtok(NULL,delim);
    }
    printf("______%s______this is the final_time!\n",my_p);
}

int main(void)
{
    my();

    return 0;
}

输出结果如下:
______我是中国人______this is the first_time!
______我是中国人测试用abcdefghijkl[测试用]______this is the final_time!

说明:我的本意是想写段代码来把字符串中不需要的字符去除掉,这个功能是实现了!
但是有个关于while循环的问题:1)while循环不是会先判断里面的逻辑表达式才决定是否执行里面的语句吗?可是我上面的语句while(pointer != NULL)此时我觉得指针pointer应该为空啊
因为在这之前我没有给pointer赋任何值啊 那么while里面的语句应该不执行才对啊!怎么现在功能变成了先执行里面的语句再判断呢?也不知道我说的是否明白 现在很纠结 希望各位能解答一下!
谢谢!

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2010-10-07 22:02 |只看该作者
pointer = strtok(NULL,delim);这不是给初值吗?

论坛徽章:
0
3 [报告]
发表于 2010-10-07 22:11 |只看该作者
首先 谢谢你的回复 那个代码pointer = strtok(NULL,delim);是我测试时候加上去的 刚才我把它去掉了 执行还是正常的 麻烦您再帮忙看看

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
4 [报告]
发表于 2010-10-07 22:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2010-10-07 22:29 |只看该作者
本帖最后由 tlocean 于 2010-10-07 22:33 编辑

楼上,那也就是说我的指针可能指向的是一个有值的地址喽 所以才会判断它不为空?但是我在while(pointer != NULL)之前放了printf(“______%s______\n”,pointer)语句 没有打印出任何信息啊??好纠结啊

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
6 [报告]
发表于 2010-10-07 22:32 |只看该作者
auto存储类型的指针未赋初值就是野指针,值不定,可不一定是NULL哦.

论坛徽章:
0
7 [报告]
发表于 2010-10-11 13:34 |只看该作者
auto存储类型的指针未赋初值就是野指针,值不定,可不一定是NULL哦.
cobras 发表于 2010-10-07 22:32


应该是这个原因了,定义指针时虽未赋初值但有指向,至于为什么打印不出来就不知道了

论坛徽章:
0
8 [报告]
发表于 2010-10-11 14:21 |只看该作者
如果你运气好的话,pointer可能会为空.但一般人没这运气

论坛徽章:
0
9 [报告]
发表于 2010-10-11 15:01 |只看该作者
源代码 如下:
环境:ubuntu + gcc

#include
#include
#include

void my()
{
    char s[] = "我 ...
tlocean 发表于 2010-10-07 21:58



    char *my_p = NULL;
   
    char *pointer;  

    习惯。。。。。

论坛徽章:
0
10 [报告]
发表于 2010-10-11 20:30 |只看该作者
没有给pointer赋值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP