字符串崩溃原因

这篇博客总结字符串崩溃的原因

 

首先 eg:

char *str1='abcde';//字符串常量,常量不允许修改,占4字节,若abcde的地址为1000,4个字节只保存他的地址,无法放abcde

char str2[]='abcde';//字符数组,占6字节,a,b,c,d,e,\0,自己创建的可以修改里面的值

str1 [0]='x';//写错误,把'x'改成了'a',因为字符串常量无法修改,所以崩溃

strcpy (str1,"xyz");//str1是常量,放一个都崩溃,放xyz同样崩溃,常量是不允许修改的

strcpy(str2,"Hello,world!");//同样崩溃,原因是越界,本只有6字节,但Hello,world有12个字节,内存不够,所以崩溃

 

因此,总结出了字符串崩溃的两个原因:

1.试图修改字符串常量的值

2.越界(内存不够)

 

eg:

#include <stdio.h>

#include <string.h>

 

int main()

{

   char str1 [10];

   gets (str1);//gets是一个极危险函数(容易出现越界),建议使用fgets(安全版本),只要出现危险,就是越界问题。

   printf ("str1=%s\n‘’,str1);


eg:

#include <stdio.h>

#include <string.h>


int main()

{

  char str1 [100] = "abcde";//100,5

  char str2 [] = "abcde";//6,5(字符串里还有\0)

  char str3 [100] ="abcdef\0ijk\n";//100,6(字符串有效长度遇到\0就停止)

  char str4 [] ="abcdef\0ijk\n";//12,6

  char *str5 = "abcde";//4,5(为字符串常量,无法修改,指针4字节)

  char *str6 = "abcdef\0ijk\n";//4,6(指针4字节,字符串有效长度遇到\0就停止)

  printf("%d,%d\n",sizeof(str1),strlen(str1));

  printf("%d,%d\n",sizeof(str2),strlen(str2));

  printf("%d,%d\n",sizeof(str3),strlen(str3));

  printf("%d,%d\n",sizeof(str4),strlen(str4));

  printf("%d,%d\n",sizeof(str5),strlen(str5));

  printf("%d,%d\n",sizeof(str6),strlen(str6));


  return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值