c语言字符串和字符数组

malloc:
申请空间后要做强制转换。
字符串常量:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
  int i = 0;
  char str1[] = "123456";
  char *str2 = "asdff";
  char *str3 = (char *) malloc (sizeof (char) * 6);
  str3[3] = 'K';
  str3 = "12312";               //此语句存在则str3内容不可修改,即对str3进行字符串赋值后不可修改
  //在赋值后实际是将新的字符串"12312"的首地址赋给str3了 str3此时成为与str2类似的字符串常量
  //之后free(str3)无效 先前申明的空间没有被释放
  str1[3] = 'K';                //可修改
  str2[3] = 'K';                //不可修改,
  str3[3] = 'K';                //不可修改,
  free (str3);
  return 0;
}

使用GDB调试,直接运行,结果如下:

Program received signal SIGSEGV, Segmentation fault.
0x00000000004005d9 in main (argc=1, argv=0x7fffffffdf88) at a.c:16
15 str2[3] = 'K'; //不可修改,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值