C语言指针字符串和数组字符串的一点区别

  1. 在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。
  2. 数组也可以用字符串常量进行初始化:

       Char a[]=”abcdefg”;

       如指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变。

       如下:

    (1)修改指针字符串中的数据

    

#include <string.h>
#include <stdio.h>

int main(){
  char *buf="ABCDEFG";
  printf("buf=%c\n",buf[2]);
  buf[2]='M';
  printf("end!\n");
}

编译通过了,但是会看到程序运行时出错了:

    (2)修改数组字符串中的数据

#include <string.h>
#include <stdio.h>

int main(){
  char buf[]="ABCDEFG";
  printf("buf=%c\n",buf[2]);
  buf[2]='M';
  printf("buf=%s\n",buf);
  printf("end!\n");
}

可以看到程序运行正常:

(--------完--------)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值