/*

  • 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. Docker的使用(四:Docker Registry本地私有仓库搭建知识点总结)
  2. python实现卡方(Chi-Squared Test)相关性检验
  3. 修改值类型的实例方法 mutating
  4. 外部排序归并排序 败者树
  5. [20161107]关于数据文件位图区.txt
  6. 这个程序员如何以一己之力阻止了 Bug 代码的提交并改变整个 DevOps 世界?
  7. python中一个范围怎么表示_我应该如何处理Python中的包含范围?
  8. Python数据类型-元组类型
  9. jquery ajax 设置header的方式
  10. 什么是条件组合覆盖_什么是综合评价?高中生报名有哪些好处?
  11. 6.gloox 之 MessageHandler
  12. 手机数控模拟器安卓版_CNC模拟器安卓中文版
  13. 学计算机二级的免费软件,计算机二级MS模拟软件
  14. 计算机专业软件工程的二本大学有哪些,全国软件工程专业大学排名 一本二本大学名单...
  15. Linux文件夹加密、解密
  16. 60后文风 or 90后文风,哪一款是你的真爱?| 文末有彩蛋
  17. 【CSAPP】二进制拆弹实验
  18. pyqt 打开并显示excel表单
  19. 防Ddos文献之应对篇-DDoS防御方案
  20. 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00

热门文章

  1. 贷款100万到手97万,这样合理吗?
  2. 重磅!四部委发文,以后买房可以省几十万元!
  3. 17家银行工资单:招行人均45万夺冠
  4. 《北妹》:中国七零后作家的一次火山喷发(答记者问)
  5. python矩阵施密特标准型_矩阵与数值计算(3)——Schur标准型和Jordan分解
  6. resnet keras 结构_Day146:第二讲 ResNet
  7. java语言编写进制转换_Java 3种方法实现进制转换
  8. GPU Gems2 - 4 分段缓冲(Segment Buffering)
  9. 【TensorFlow-windows】MobileNet理论概览与实现
  10. 李宏毅机器学习课程3~~~梯度下降法