免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: qnnui
打印 上一主题 下一主题

[函数] 新系统中调用strcpy(char*,char*)运行出错了,在老系统中是好的(请教) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-07-04 09:44 |只看该作者
原帖由 prolj 于 2008-7-4 03:47 发表
7.3.1 修改内容

       示例7-3-1中,字符数组a的容量是6个字符,其内容为hello\0。a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不 ...

林xx的书 最好不要看,  好处不大。

论坛徽章:
0
22 [报告]
发表于 2008-07-04 10:39 |只看该作者
用pclint帮助你检查吧,否则在新的系统上你天天有恶梦。

我觉得6楼说的是对的

论坛徽章:
0
23 [报告]
发表于 2008-07-04 12:15 |只看该作者
原帖由 aero 于 2008-7-4 09:24 发表
应该没有规定,是否是只读的,是由OS决定的。在DOS环境下,甚至可以在运行中修改要执行的代码。

不是很清楚,VC和GCC都是这样的

论坛徽章:
0
24 [报告]
发表于 2008-07-04 12:37 |只看该作者
精华区有好东东:---------字符串字面量:
http://bbs.chinaunix.net/viewthr ... p%3Bfilter%3Ddigest

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
25 [报告]
发表于 2008-07-04 12:37 |只看该作者
原帖由 prolj 于 2008-7-4 12:15 发表

不是很清楚,VC和GCC都是这样的


用TC就不是了。

论坛徽章:
0
26 [报告]
发表于 2008-07-04 12:40 |只看该作者

回复 #25 aero 的帖子

哦,知道了

论坛徽章:
0
27 [报告]
发表于 2008-07-06 22:02 |只看该作者
3楼的解释是正确的

一般的代码的写法如下:

char fmtstr[] = "000.000";  
const char* fmttype = "ZZZ.Z99";        // 或者 char fmttype[] = ...
strcpy (fmtstr,fmttype);

特别要在fmttype的声明前面加 const, 你之前的代码是一种C标准没有规范的内容,这样写在不同的系统中是会出现你现在发现的问题的

论坛徽章:
0
28 [报告]
发表于 2008-07-07 09:50 |只看该作者
建议先修好C语言基础再说吧。

论坛徽章:
0
29 [报告]
发表于 2008-07-07 17:48 |只看该作者
原帖由 qnnui 于 2008-7-3 20:23 发表
C程序例如:
#include
#include

int main() {
char* fmtstr = "000.000";  // 如果这句改为char fmtstr[]="000.000",是能正常运行的.
char* fmttype = "ZZZ.Z99";

strcpy(fmtstr , fmttype);
p ...



char* fmtstr = "000.000"定义了一个字符串常量(数据段),fmtstr指向这个常量,
无论正常运行与否,最好不要这么操作吧。

可以参考高质量c/c++编程
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP