/*

  • http://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.html
  • 参考这篇文章

*  char *a = "Hello";Hello存放在常量区,是无法修改的。

* 通过指针只可以访问字符串常量,而不可以去改变它

*

*

*  char a[] = "Hello";而数组存放在栈中,是可以修改的

*  Hello存放在栈中,可以通过指针去访问和修改数组内容

*

sizeof和strlen两个函数的随想:

①sizeof的参数是数组,返回的是编译时分配的数组空间 (sizeof是运算符,值在编译时已计算好)

②strlen的参数是字符型指针(char *),当数组名作为参数传入时,实际上数组就退化为指针了。

(strlen是函数,值需要在运行时才能得出)

该函数的实际功能从代表字符串的第一个地址开始遍历,知道遇到结束符'\0',返回长度不包括'\0'

这也就说明下面的函数为什么会将数组越界的字符串也一起显示了,strlen的限制就只是'\0',而

且数组传入后即退化为指针,指针只是在读这些地址的值,没有修改,所以也不“违法”。

总的来说就是,数组可以越界,编译器也不会报警,至于越界使用的地址会造成什么,谁也不知道

char *a= "Hello, ";
char b[]= "World!";strcat(b, a);     //  这样是可行的,但是将b和a互换位置后,将导致段错误a是常量,不可被更改printf("%s",b);*/
#include<stdio.h>
#include<string.h>voidstrcat(char a[], char b[]);
intstrlen(char *s);intmain()
{
int i = 0;
char a[] = "Hello, ";
char b[] = "World!";strcat(a, b);printf("%d\n", strlen(a));
printf("%d\n", sizeof(a));printf("%s", a);
return 0;
}voidstrcat(char a[], char b[])
{
int i = 0, j = 0;while(a[i] != '\0')
i++;while( (a[i++] = b[j++]) != '\0' );
}intstrlen(char *s)
{
char *p = s;while(*p != '\0')
p++;return p-s;
}

转载于:https://www.cnblogs.com/yuyounglife/p/5661168.html

由strcat函数引发的对char *a和char a[]以及sizeof和strlen相关推荐

  1. C++ strcat 函数实现字符串拼接报错

    C++中,使用cstring 中 strcat 函数实现字符串拼接,报错: error C4996: 'strcat': This function or variable may be unsafe ...

  2. 【C语言】strcat函数_字符串追加/连接

    前言:在C/C++的学习过程当中一定一定要多刷题,牛客网作为国内内容超级丰富的IT题库,尤其是它的C.C++,有从入门到大厂真题,而且大部分的考试题目也是从中抽取,还有很多面经,推荐大家去牛客网进行刷 ...

  3. 编写函数void len_cat(char c1[],char c2[])将第二个串连接到第一个串之后,不允许使用strcat函数。

    #include <stdio.h> #include <string.h> #define N 100 void len_cat(char c1[],char c2[]) { ...

  4. strcat函数oracle,实现strcat函数

    关于C语言字符串函数使用的一点心得 就字符串的拼接函数为例strcat. 原型:extern char *strcat(char *dest,char *src);用法:#include <st ...

  5. C语言标准库之strcat函数

    2018-10-20 C库函数strcat()函数的功能是实现字符串的拼接.其函数原型如下所示 char *strcat(char *dest, const char *src) 1.参数说明 des ...

  6. strcat()函数常见问题

    strcat(char *_Destination,const char *_Source)函数的功能是将后一个字符串粘贴到前一个字符串的末尾 原型 char *strcat(char *_Desti ...

  7. strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数

    strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...

  8. c语言 strcpy原型,浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, cons ...

  9. C和指针之strcat函数 strchr函数 strcmp函数 strcpy函数 strnchr函数 strstr函数实现

    1  strcat函数实现 #include <stdio.h> //简单实现strcat函数 char *my_strcat(char *des, const char *src) {i ...

最新文章

  1. 【怎样写代码】确保对象的唯一性 -- 单例模式(四):饿汉式单例类与懒汉式单例类的讨论
  2. linux下如何查询jdk的安装路径
  3. 6s在c语言中的用法,C语言中assert的用法讲解
  4. 对HTTP基本认识(HTTP协议入门必备)
  5. 【sas proc sql】group by
  6. 一步步学习SPD2010--第九章节--使用可重用工作流和工作流表单
  7. yocto rootfs 支持pam
  8. nfs挂载hdfs,实现云存储
  9. 累计增量备份策略_SAN存储做定时/实时备份的介绍
  10. 华为4g显示无服务器,华为nova5 插卡无4G
  11. 今日头条抖音小程序开发文档
  12. [work] 一阶 二阶马尔可夫
  13. void* 指针有什么用
  14. Java的Integer和Integer比较相等
  15. 预付费售电管理系统的构建及应用
  16. matlab实习,matlab实习报告
  17. BarManage --- 菜单
  18. 『XXG探索』canvas 获取图片主体颜色
  19. Flutter Text 行高相关
  20. mac下镜像飞速安装Homebrew教程

热门文章

  1. watson软件使用_使用Watson Assistant进行多语言管理
  2. linux应用开发:日志记录
  3. 目前市场上有没有年化收益在7%以上,而且保本保息的理财?
  4. 女垒姑娘最漂亮,青年女足最顽强
  5. VS2008 SP1补丁
  6. python打印菱形星号代码_Python打印“菱形”星号代码
  7. html js坐标图,javascript – HTML5 Canvas沿着带坐标的路径拖动图像
  8. php 删除某个文件夹,Php删除指定文件与文件夹的方法
  9. asp.net mvc项目实例_降龙-第13章:MVC开发准备
  10. mysql第四项_mysql数据库的基本介绍与操作(第四篇-mysql索引篇)