为了账号安全,请及时绑定邮箱和手机立即绑定

C语言指针的问题,字符串和数组指针的问题

C语言指针的问题,字符串和数组指针的问题

C C++
琼华紫英 2018-01-28 22:33:19
#include<iostream>void main(){ char s[20]="abcdefghi"; char *p="1234567"; printf("%s\n",strcpy(p+3,s+8));//printf("%s\n",strcat(p+3,s+8));都会报错 system("pause");}//上式中的问题为什么指针在前会报错,而换成数组在前就不会报错?如printf("%s\n",strcpy(s+3,p+4));//错误问题0x0F121DF7 (msvcr110d.dll) (ConsoleApplication1.exe 中)处的第一机会异常: 0xC0000005: 写入位置 0x009ECC83 时发生访问冲突。//0x0F121DF7 (msvcr110d.dll) (ConsoleApplication1.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x009ECC83 时发生访问冲突。
查看完整描述

1 回答

?
傻圆傻圆

TA贡献14条经验 获得超23个赞

char *str = "xxxxxxxxx";    // 只读
char str[] = "xxxxxxxxxx";  // 读写

    两种方式定义的字符串都可以访问其中的内容,但是具体的细节还是有一些不同的,第一种定义方法一般叫做字符串常量,常量,就意味着不能修改其中的内容,所有在你的代码中,尝试修改了这个常量中的内容,所以会报错。

    第一种方式我个人理解如下(不一定准确,个人感觉):

const char str[] = "xxxxxxxxxx";
const char *p_str = str;


查看完整回答
1 反对 回复 2018-02-14
  • 琼华紫英
    琼华紫英
    我试了一下,确实指针没办法写入。但我记得数组名也是常量吧?为啥它可以进行写入?*(p+3)=‘1’;会报错而*(s+3)=‘1’;不会?
  • 1 回答
  • 0 关注
  • 1339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信