当前位置:  技术问答>数据库 iis7站长之家

strcpy函数

    来源: 互联网  发布时间:2017-01-04

    本文导语:  定义了两个字符串指针 char *x; char *y; 然后对x赋值一个字符串,y没有赋值,在把x的字符串复制到y strcpy(y,x) 提示“段错误”,是什么原因呢? | 给y付一个初值,你y现在的值不确定,会引起段错误 ...

定义了两个字符串指针
char *x;
char *y;
然后对x赋值一个字符串,y没有赋值,在把x的字符串复制到y
strcpy(y,x)
提示“段错误”,是什么原因呢?

|
给y付一个初值,你y现在的值不确定,会引起段错误

|
段错误,往往是非法地址访问引发的。 strcpy这种函数很容易发生非法地址访问的。
在这里,你想从x中把数据拷贝到y,y应该有初始值,同时给x分配足够的空间,规范的做法应该将x初始化。

strcpy是从给定源指针地址处拷贝c语言字符串到指定目标地址处,因此拷贝的内存大小是字符串长度(strlen的结果值)+1,它以null字符为字符串结束标识进行拷贝的。
按照你的那个,由于x指针指向的字符没有初始化,因此会找到第一个null,这个无法确定到底多少个字符,而y指针也没有分配空间,因此指向的内存也无法确定是否是可以访问的。

你应该这样写:
char *x = "my string";
char *y = new char[100]; //起码要大于x的长度,在这里就得大于等于10个字符
memset(y, 100, 0) ;//先将目标内存清为null
strcpy(y,x);//从源x中拷贝到y

|


你仅仅这样改的话,是否有问题完全取决于x这个字符串指针的长度,也就是其指向的内存位置,到第一个null的位置,即字符串长度,因此这个字符串长度很随机的,如果在长度超过你的目标y的空间大小的时候,自然也存在非法地址访问的问题,而且是数组越界,这个可能短时间内没出现问题的现象,但是却破坏了内存,是很危险的。一旦发生问题,还很难debug。

|


无需初始化,strcpy会拷贝结束符的所以不需要memset进行清零。
既然用的是C风格的。
那么
const char *x = "abcdefg";
char *y = (char *)malloc(100);
strcpy(y, x);
如果是C++的话,会更安全。
const char *x = "abcdefg";
string y;
y.assign(x);

|
y没有分配空间,他指向的区域不合法

|
char *x=new char[100];
char *y=“abcde”;
strcpy(y,x)
试试这样

|

写反了
应该是
strcpy(x,y)

|
无语,又在用野指针!!!!!!!!!!!!!!!!!!!!!!!

|

memset用错了把。

|
1 楼主对指针还没有掌握
2 楼上的确实memset的第二个 和第三个参数顺序 错了

|
恩。是写反了。我平时不大写程序,所以不太熟悉。

|
malloc一下y

|
经典的访问野指针错误,楼主需要好好学习C语言啦。

|
呵,我也不经意间犯这种毛病啊,要注意了啊。。。。

|
呵,我也不经意间犯这种毛病啊,要注意了啊。。。。

|
呵,我也不经意间犯这种毛病啊,要注意了啊。。。。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • strcpy和memcpy哪个效率高,提倡用哪个?
  • 深入分析C中不安全的sprintf与strcpy
  • Linux 下,我想看 strcpy,strcat的 源代码?
  • 深入理解strcpy与memcpy的区别
  • 用C++实现strcpy(),返回一个char*类型的深入分析
  • 问个低级的问题:在windows里 有 char * strfilename1 =new char[255];strcpy(strfilename1,"C:\finger2.bmp")的用法,在纯java里怎么写
  • 浅析C++中memset,memcpy,strcpy的区别
  • 求教!写共享内存使用strcpy会出现段错误。用的是LINUX虚拟机


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3