字符串常量和字符串变量

字符串常量和字符串变量所引发的错误

我以前一直认为char *和char []是一样的,但其实他们不一样.

看下面一段代码:

#include<stdio.h>
int main(void)
{
    char * ptr = "abc";
    ptr[0] = 'x';
    printf("%s\n",ptr);
    return 0;
}

另一段代码:

#include<stdio.h>
int main(void)
{
    char ptr[] = "abc";
    ptr[0] = 'x';
    printf("%s\n",ptr);
    return 0;
}

分析:

第一段代码ptr指针指向字符串常量,无法修改,字符串常量存储在堆区,所以在修改字符串时:
Ubuntu20.04 gcc编译器能编译能通过,但运行时会报"段错误"的错误
Windows下visual studio 2017也能编译通过,但运行时会报:引发了异常:写入访问权限冲突的错误
第二段代码ptr是一个数组,存储的字符串变量,运行结果是xbc
代码的运行结果和编译器平台有关,

感想:

这是一个小问题,而且我可能以前也学过,因为问题规模小,刚学的时候可能一下就定位到错误在哪里而没有多去思考,但当程序规模更大的时候,这个错误就不会那么容易发现了,因为程序一运行就只会显示段错误,你设置的查找错误的printf语句的结果都不会显示出来.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值