| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1600 人关注过本帖
标题:c语言,指针打印问题
只看楼主 加入收藏
java_haier
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2018-3-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
c语言,指针打印问题
本人刚开始学C,关于指针还不太明白,请问:

如下程序,按照预期,应该打印3次

但是实际打印不是3次,并且n不是从1开始打印,*p的值打印出来一直为空字符

这是为什么?

#include "stdafx.h"

int main()

{

    char s[] = "abc\0";

    char *p = s;

    int n;

    for (n = 0; *p != '\0', p++;) {

        n++;

        printf("n = %d\tp = %p\t*p = %c\n", n, p, *p);

    }

       return 0;

}
搜索更多相关主题的帖子: c语言 指针 打印 int char 
2018-03-24 10:31
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
*p!='\0',p++;

*p!='\0',p++的表达式始终不等于0,不能结束循环~
正常来说是for (n = 0; *p != '\0';p++);
这样的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-03-24 11:56
c20180318
Rank: 2
等 级:论坛游民
帖 子:5
专家分:32
注 册:2018-3-18
收藏
得分:5 
#include "stdio.h"

int main()

{

    char s[] = "abc\0";

    char *p = s;

    int n;

    for (n = 0; *p != '\0'; p++) {

        n++;

        printf("n = %d\tp = %p\t*p = %x\n", n, p, *p);

    }

       return 0;

}/*测试通过*/
2018-03-24 13:01
java_haier
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2018-3-24
收藏
得分:0 
回复 2楼 九转星河
非常感谢,问题解决了
按照您给的答复,将for (n=0; *p != '\0', p++;)改成for (n=0; *p != '\0'; p++)就可以了

我查找了自己原先为什么那样写的原因,发现是自己模仿了中文版《C程序设计语言》中的一段代码

代码如下:
/* strlen: return length of string s */
int strlen(char *s)
{
    int n;
     for (n = 0; *s != '\0', s++)
        n++;
    return n;   
}

于是我就写成了for (n=0; *p != '\0', p++)
我用的是visual studio 2017,这样写它就会提示我p++后面少了;
加上去之后,打印就出错了
所以,中文版《C程序设计语言》的这一段代码是不是有误?

[此贴子已经被作者于2018-3-24 13:54编辑过]

2018-03-24 13:52
java_haier
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2018-3-24
收藏
得分:0 
回复 3楼 c20180318
谢谢您的回复
但是,想请教一下,为什么打印*p用的是%x?
转成十六进制吗?
2018-03-24 13:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
回复 4楼 java_haier
没有所谓错误与没有错误,编译器只是按照代码解释进行运行,至于期望要得出什么结果那是设计者的与使用者问题了~
所以没必要太过注重课本的代码,关键还是要自己理解,如果发现了那些"错误"的代码,自己知道有什么问题改回来就是了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-03-24 16:24
c20180318
Rank: 2
等 级:论坛游民
帖 子:5
专家分:32
注 册:2018-3-18
收藏
得分:0 
回复 5楼 java_haier
地址一般以十六进制查看。
2018-03-24 16:53
快速回复:c语言,指针打印问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015527 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved