CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

VC6为什么会在字符指针赋值的时候报错呢?

楼主NETFUNNER(.NETFUNNER)2005-11-10 11:14:09 在 C/C++ / C语言 提问

void   Copy(char   *from,char   *to)  
  {  
  for   (;*from   !=   '\0';   from++,to++)  
  *to   =   *from;  
  *to='\0';  
  }  
  函数原形如上,但是在*to   =   *from的时候,报内存错误,我实在是找不到这个错在哪儿!!!! 问题点数:20、回复次数:11Top

1 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-11-10 11:21:45 得分 15

调用copy前,你是不是这样定义两个指针?  
   
  char   *p;  
  char   *q;  
   
  或者  
   
  char   *p="sldjfldf";  
  char   *q="dlsjfld";  
   
  然后用copy(q,   p);调用copy?  
   
  第一种情况,p没有分配有意义的空间;第二种情况,字符串常量是不能被修改的。Top

2 楼goodluckyxl(被人遗忘的狗)回复于 2005-11-10 11:32:23 得分 5

内存越界或者非法操作  
  把所有程序贴出来看    
  尤其你是你to的内存申请过程Top

3 楼NETFUNNER(.NETFUNNER)回复于 2005-11-10 11:36:18 得分 0

megaboy(飞天御剑流之杀神一刀斩):我是用的第二种方式调用的,但是,我觉得p指针只是指向这个字符串的第一个字节的地址,根据指针的后移,是可以改变这个指针所指的内容的!不知道理解是否正确!  
   
  我在别的程序中碰到了一个类似的问题,因此翻看了谭浩强的书,发现236页就是我写的那样,呵呵,莫非是VC6有别的特性?Top

4 楼goodluckyxl(被人遗忘的狗)回复于 2005-11-10 11:40:51 得分 0

char   *q="dlsjfld";   //这种孵值q指向区域是一块常量区   不可修改  
                                        //写操作当然有问题Top

5 楼lzp229(只想飞)(卡卡)回复于 2005-11-10 11:44:45 得分 0

又是修改常量,当然出问题了。Top

6 楼NETFUNNER(.NETFUNNER)回复于 2005-11-10 11:56:36 得分 0

以防万一,我把老谭书上写的例子搬上来了,呵呵,236页《C语言程序设计》  
  void   Copy(char   *from,char   *to)  
  {  
  for   (;*from   !=   '\0';   from++,to++)  
  *to   =   *from;  
  *to='\0';  
  }  
   
  int   main()  
  {  
  char   *a   =   "I   am   a   teacher.";  
  char   *b   =   "You   are   a   student.";  
  printf("string   a   =   %s\nstring   b   =   %s\n",a,b);  
  Copy(a,b);  
  printf("string   a   =   %s\nstring   b   =   %s",a,b);  
  return   0;  
  }Top

7 楼goodluckyxl(被人遗忘的狗)回复于 2005-11-10 11:58:08 得分 0

void   Copy(char   *from,char   *to)  
  {  
  for   (;*from   !=   '\0';   from++,to++)  
  *to   =   *from;  
  *to='\0';  
  }  
   
  int   main()  
  {  
  char   a[]   =   "I   am   a   teacher.";           //here    
  char   b[]   =   "You   are   a   student.";    
  printf("string   a   =   %s\nstring   b   =   %s\n",a,b);  
  Copy(a,b);  
  printf("string   a   =   %s\nstring   b   =   %s",a,b);  
  return   0;  
  }  
  Top

8 楼Flood1984(峰子)回复于 2005-11-10 11:58:14 得分 0

如果没有操作系统的保护就不会有问题...Top

9 楼foochow(无聊,灌水......)回复于 2005-11-10 12:06:12 得分 0

release模式下就OK....Top

10 楼koil(邮桶)回复于 2005-11-10 12:25:06 得分 0

悬挂~?Top

11 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-11-10 12:31:06 得分 0

以防万一,我把老谭书上写的例子搬上来了,呵呵,236页《C语言程序设计》  
  --------------------------------------------------------------------  
  谭的这本书写于早期,那时候的C89对修改字符串常量的行为规定为未定义的,后来的修订版本把未定义改为禁止,而VC6的诞生,应该就是修订版本之后了。如果你用tc2.0编译,是可以通过的,因为tc2.0跟早期C89标准是同一个时代的。  
   
  谭这本书的代码很可能是用tc2.0编译的,因此可以通过。但是,从另一个侧面可见,谭当时极可能自己都没看过标准,因为不应该用一段未定义的代码作为例子。Top

相关问题

  • 结构数组中的字符型数据赋值报错。。。
  • 字符串赋值
  • 字符串赋值问题
  • 求教:字符串赋值?
  • 关于字符串赋值!
  • 字符串赋值问题?
  • 字符串数组赋值
  • DynaActionForm赋值报错,我该怎么办?
  • 赋值问题!VC
  • 关于字符串赋值的问题

关键词

  • 指针
  • 修改
  • 内存
  • vc
  • 常量
  • 谭
  • 未定义
  • nstring
  • 字符串
  • 调用

得分解答快速导航

  • 帖主:NETFUNNER
  • megaboy
  • goodluckyxl

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo