鱼C论坛

 找回密码
 立即注册
查看: 2610|回复: 10

关于C的字符指针问题

[复制链接]
发表于 2014-1-13 10:43:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
char *mm = "i love fishc.com!";
char *gg = NULL;


while (*gg++ = *mm++);
这样写为什么不行呢? 求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-13 11:44:08 | 显示全部楼层
你这条While语句想做的就是将一个字符写入到一个0地址内存中,这是不允许的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 11:45:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-13 11:48:42 | 显示全部楼层
pro-serv 发表于 2014-1-13 11:45
NULL是0地址?

NULL是宏定义,也就是0

评分

参与人数 1鱼币 +1 收起 理由
pro-serv + 1 明白了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 12:03:45 | 显示全部楼层
my_angel 发表于 2014-1-13 11:48
NULL是宏定义,也就是0

野指针的成因主要有三种:
一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-13 13:50:20 | 显示全部楼层
#include "stdio.h"

void main()
{
        char *mm = "i love fishc.com!";
        char *gg = NULL;

        printf("%d\n", mm);
        printf("%d\n", gg);
        printf("%c\n", *mm);

        while ( *mm != NULL)
        {
                *mm++;
                printf("%c\n", *mm);
        }
        while ( *gg = NULL)
        {
                *gg++;
                printf("%c", *gg);
        }

       
//        while (*gg++ = *mm++);
//        printf("%s", *mm);
}
你可以自己调试看看。这是我修改了的。你*gg++,越界访问了(即非法访问内存地址了),会出现内存地址非法访问(Access volation)。更高深的解释我也不太清楚~,同求详解~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 21:44:45 | 显示全部楼层
Famouslingyun 发表于 2014-1-13 13:50
#include "stdio.h"

void main()

谢谢各位,NULL的值是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-13 22:20:24 | 显示全部楼层
Famouslingyun 发表于 2014-1-13 13:50
#include "stdio.h"

void main()

while ( *gg = NULL)你这句是什么意思?赋值吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-14 00:13:54 | 显示全部楼层
这个不错,用一阶段就会了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-14 10:33:16 | 显示全部楼层
char *gg = NULL;
简单的说吧,是你这个gg 没有指向某个内存空间,没有内存来存放数据呢,好比你带MM去宾馆开房,前台MM给了你一把开不了门的钥匙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-14 19:06:21 | 显示全部楼层
牛头的主人 发表于 2014-1-13 22:20
while ( *gg = NULL)你这句是什么意思?赋值吗?

sorry,手抖了一下,少了一个=号。原意是判等符号~谢谢提醒~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 00:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表