关于scrcpy传递的参数问题

nbabest23 2009-07-29 10:58:25
函数中定义了一个 指向字符的指针,一个字符数组
char *a="qwer";
char st[]="asdf";
想使用scrcpy将st[]中的字符串复制到*a中

scrcpy(a,st);
编译没有错误,但是运行时会弹出一个错误窗口
但是写成scrcpy(st,a)
就没有问题,请高手帮忙指点下,3Q
...全文
617 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
amossavez 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 nbabest23 的回复:]
函数中定义了一个 指向字符的指针,一个字符数组
char *a="qwer";
char st[]="asdf";
想使用scrcpy将st[]中的字符串复制到*a中

scrcpy(a,st);
编译没有错误,但是运行时会弹出一个错误窗口
但是写成scrcpy(st,a)
就没有问题,请高手帮忙指点下,3Q
[/Quote]
char*是const,不允许你更改他的内容的!
  • 打赏
  • 举报
回复
char *a="qwer"; //a只是声明一个指针指向常量区数据,首先它是const,不能被cpy,此外,你这样strcpy很容易内存越界

改成
char a[]="qwer";
char st[]="asdf";

即可。
但是要保证a的内存足够
iitlhnhlhnh 2009-07-29
  • 打赏
  • 举报
回复
scrcpy(&(*st),a);
st指针指下的内存地址:&(*st) .
kouwenlong 2009-07-29
  • 打赏
  • 举报
回复
char *a="qwer";
字符串指针变量.
char st[]="asdf";
同样是字符串指针变量,但是指向一块固定的内存.
所以可以向里面复制.
rendao0563 2009-07-29
  • 打赏
  • 举报
回复
scrcpy? 是说的strcpy吧?
crst_zh 2009-07-29
  • 打赏
  • 举报
回复
a是字符串常量,不允许修改。
char a[256]="qwer";
char st[]="asdf";

这样就对了
newpuple 2009-07-29
  • 打赏
  • 举报
回复
scrcpy(a,st);
编译没有错误,但是运行时会弹出一个错误窗口
但是写成scrcpy(st,a)
就没有问题,请高手帮忙指点下,3Q

很明显你定义了两个字符,但是用两种不同的方式去访问,
第一种是用指针,但是请注意该指针没有内存,仅仅是指向字符串的地址罢了
第二种是数组,直接通过数组下标访问,但是该数组大小为5,是系统自动分配的,也就是有内存.

因而你第一中拷贝必定出错,原因是,将一个内存拷贝给一个没有内存的指针,怎么会不出错,并且该指针指向的内容应该为静态数据区;第二种拷贝不会出错是因为数组是有内存的,当然可以拷贝成功.
nbabest23 2009-07-29
  • 打赏
  • 举报
回复
如果是a[10]肯定没有问题,我就是想知道,为什么第一个参数是指针形式的话 会出现错误
yshuise 2009-07-29
  • 打赏
  • 举报
回复
char a[10];
试试
feilong_1216 2009-07-29
  • 打赏
  • 举报
回复
char *a="qwer" 中"qwer"静态常量,不是new 出来的指针。指针a值是不允许修改的。所以在拷贝值的时候会出错。
在写程序的时候不允许这样用,这样用很危险,建议这样写,char a[] = "qwer",所以你第二个函数scrcpy(st,a) 是静态常量给可写变量写值是正确的
crst_zh 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nbabest23 的回复:]
大家的观点无非两个
1.3楼关于内存的说法,这种说法我觉得很有道理
2.楼上的两位说char * 是const
  char *a="qwer";
  char st[]="asdf";
  a=st;
  cout < <a < <endl;
虽然这个没有使用strcpy但是,我直接把st副给了指针a, 修改了他的内容啊,程序可以正常运行也没有出错,我觉得这个观点应该是错误的吧


指针常量和常量指针是不同的,一个是指针不能变,一个是指针指向的内容不能变。
你举的例子是改变了指针,当然可以了。
事实上char *a="qwer",a是一个常量指针(指向的内容不能变,所以*a不能被修改)
而不是指针常量。
你得搞清char *const和char * const p的区别

[/Quote]
nbabest23 2009-07-29
  • 打赏
  • 举报
回复
大家的观点无非两个
1.3楼关于内存的说法,这种说法我觉得很有道理
2.楼上的两位说char * 是const
char *a="qwer";
char st[]="asdf";
a=st;
cout<<a<<endl;
虽然这个没有使用strcpy但是,我直接把st副给了指针a, 修改了他的内容啊,程序可以正常运行也没有出错,我觉得这个观点应该是错误的吧

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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