strcpy这样用为什么不行呢?

runryan 2011-06-29 05:21:22
char* small = "hello world";
char* test1= (char*)malloc(12);
char test2[12];
char* test3 = "";
strcpy(test1,small);//OK
strcpy(test1,small);//OK
strcpy(test3,small);//0xC0000005异常,为什么呢
...全文
305 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
q1q2q3q4ln 2011-06-30
  • 打赏
  • 举报
回复
strcpy(test3,small);//0xC0000005异常,为什么呢
test3的存储空间是0,不能将任何的字符串复制到它的存储空间
向立天 2011-06-30
  • 打赏
  • 举报
回复
找本C语言基础的书看看有关字符串的说明
用户 昵称 2011-06-30
  • 打赏
  • 举报
回复
这就是指针的用法的不同
simoreg 2011-06-29
  • 打赏
  • 举报
回复
small是关键字,楼主用的什么编译器能通过第一和第五行的编译??
kubp67 2011-06-29
  • 打赏
  • 举报
回复
test3的初始化不合理
smilestone322 2011-06-29
  • 打赏
  • 举报
回复
支持,常量不能修改,造成内存错误
龙行天下之Sky 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 runryan 的回复:]
char* small = "hello world";
char* test1= (char*)malloc(12);
char test2[12];
char* test3 = "";
strcpy(test1,small);//OK
strcpy(test1,small);//OK
strcpy(test3,small);//0xC0000005异常,为什么呢
[/Quote]
test3指向的是常量字符串,在程序的常量区,是不可以修改的
maoxing63570 2011-06-29
  • 打赏
  • 举报
回复
指针本身不等于保存数据的空间,指针的作用只是用来保存一个地址
青稞 2011-06-29
  • 打赏
  • 举报
回复
看下C的基础书籍就知道了。
常量是不可以修改的哦。
liuzheng85711 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wltg2001 的回复:]
char* test3 = "";
======
这个在编译时是当作常量字符串的,不能改。
[/Quote]
+1
wltg2001 2011-06-29
  • 打赏
  • 举报
回复
char* test3 = "";
======
这个在编译时是当作常量字符串的,不能改。
RLib 2011-06-29
  • 打赏
  • 举报
回复

char* test3 = "";
DWORD test4;
VirtualProtectEx(HANDLE(-1), test3, 4096, PAGE_READWRITE, (PDWORD)&test4);
strcpy(test3,small);//正常


嘿嘿
hustlaofan 2011-06-29
  • 打赏
  • 举报
回复
确实,test指向常量字符串,无法修改
fyzh84 2011-06-29
  • 打赏
  • 举报
回复
strcpy()函数使用有特别注意的地方下面是MSDN的解释:
The first argument, psz1, must be large enough to hold psz2 and the closing '\0', otherwise a buffer overrun may occur. Buffer overruns may lead to a denial of service attack against the application if an access violation occurs. In the worst case, a buffer overrun may allow an attacker to inject executable code into your process, especially if psz1 is a stack-based buffer. Consider using one of the following alternatives: StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyN, or StringCchCopyNEx. You should review Security Considerations: Microsoft Windows Shell before continuing.
Eleven 2011-06-29
  • 打赏
  • 举报
回复
你的test3指向的常量区,不能修改~
starytx 2011-06-29
  • 打赏
  • 举报
回复
test3没有空间或者说空间不够

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧