nuccch
弯弯月牙
采纳率0%
2011-02-28 08:30

C程序的一个小问题

已采纳

[code="java"]
void main()
{
char str = "china";
printf("%c\n",str[1]);
//
(str+1) = *(str+2); // 在vc6.0下运行时出错,不明白是什么原因
puts(str);
}

在winTc下是没问题的,在vc6.0下编译和链接都没问题,但是运行的时候,注释的那行出错了,不明白是什么原因,请各位给个提示,谢谢!
[/code]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • wen563412561 wen563412561 10年前

    嗯,以下是我的理解:
    因为创建数组是不会共享同一个内存空间的!所以即使数组内容一样,也不会存储在同一空间中,除非你刻意赋值!我上面举得例子是:char *x = "xxxxxx"这样的声明,是会共享同一个内存空间,说得明白一点是,举个例子:
    char *ptr = "chinc" ;
    char *ptr1 = "chinc" ;
    printf("%d,%d\n",ptr,ptr1) ;
    printf("%d\n",&"chinc") ;
    上面输出地值是全部相同的,意思是chinc这个字面字符串就是可以被共享的!下次再出现这个字面字符串时就不用再创建了!就直接到指定的内存中读取就可以!但对于数组却不会,这点你可以自己做实验。
    额,可能说的不太明白,呵呵,也许是我的水平有限!!

    点赞 评论 复制链接分享
  • wen563412561 wen563412561 10年前

    应该是分配内存的问题,有些内存是不可写的,比如有些游戏内存是不可读的。

    举个例子:
    在用char x = "xxxxxx"创建C风格字符串时,会在存储区域创建一个已\0结尾的xxxxxx存储空间,而且将x指向它的首地址,比如首地址是1,那么这个空间还在使用的时候,X指向的内容就不能被改变!,比如像你上面的那个例子(str+1)是一个值来的,把*(str+2]的值赋给它是错误的,比如str[1]='c'同样是一样的错误。

    总之:
    声明的字符串“china”正在被指向,所以这个区域内的内容暂时不能被改变~~

    这是本人的理解,不知对否!!

    点赞 评论 复制链接分享