pro-serv 发表于 2014-1-13 10:43:04

关于C的字符指针问题

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


while (*gg++ = *mm++);
这样写为什么不行呢? 求解

my_angel 发表于 2014-1-13 11:44:08

你这条While语句想做的就是将一个字符写入到一个0地址内存中,这是不允许的。。

pro-serv 发表于 2014-1-13 11:45:07

my_angel 发表于 2014-1-13 11:44 static/image/common/back.gif
你这条While语句想做的就是将一个字符写入到一个0地址内存中,这是不允许的。。

NULL是0地址?

my_angel 发表于 2014-1-13 11:48:42

pro-serv 发表于 2014-1-13 11:45 static/image/common/back.gif
NULL是0地址?

NULL是宏定义,也就是0

pro-serv 发表于 2014-1-13 12:03:45

my_angel 发表于 2014-1-13 11:48 static/image/common/back.gif
NULL是宏定义,也就是0

野指针的成因主要有三种:
一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

Famouslingyun 发表于 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)。更高深的解释我也不太清楚~,同求详解~

pro-serv 发表于 2014-1-13 21:44:45

Famouslingyun 发表于 2014-1-13 13:50 static/image/common/back.gif
#include "stdio.h"

void main()


谢谢各位,NULL的值是0

牛头的主人 发表于 2014-1-13 22:20:24

Famouslingyun 发表于 2014-1-13 13:50 static/image/common/back.gif
#include "stdio.h"

void main()


while ( *gg = NULL)你这句是什么意思?赋值吗?

网络学习 发表于 2014-1-14 00:13:54

这个不错,用一阶段就会了

戏++ 发表于 2014-1-14 10:33:16

char *gg = NULL;
简单的说吧,是你这个gg 没有指向某个内存空间,没有内存来存放数据呢,好比你带MM去宾馆开房,前台MM给了你一把开不了门的钥匙

Famouslingyun 发表于 2014-1-14 19:06:21

牛头的主人 发表于 2014-1-13 22:20 static/image/common/back.gif
while ( *gg = NULL)你这句是什么意思?赋值吗?

sorry,手抖了一下,少了一个=号。原意是判等符号~谢谢提醒~
页: [1]
查看完整版本: 关于C的字符指针问题