《c程序设计语言》读书笔记-5.3-指针实现strcat
2014-11-13 23:06
288 查看
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <curses.h> void strcat_(char *s,char *t) { while(*s) s++; while((*s++ = *t++)) ; } int main() { char c[] = "I love you!"; //char *c = "I love you!";; char p[] = "You are a good man!"; //*p = "You are a good man!" ; strcat_(c,p); return 0; }
这个程序有一个注意的地方,char *p 这样定义是不行的,因为指针定义的字符串不可修改;而如果用数组 p[ ] 定义数组,则可以修改。
百度知道网友给我的回答:
传递的都是字符串的首地址,但是字符串内容却不同: char* c = "I love you!"这里定义的指针c指向的是一个常量字符串"I love you!" ,p也一样 char c[] = “I love you!";这里的c是一个字符数组,以'\0'结尾。p也一样 所谓常量字符串,就是说字符串的内容是不能改变的,你再调用strcat_函数,其实就是把p的内容连接到c字符串的后面,改变字符串c,若c是常量,显然会语法错误。而c[]定义的是个字符数组,不是常量,可修改的。到这里疑问已经解答了。 另外,char c[] = “I love you!";这种定义字符串变量的方法,[]里面没写字符数组大小,但是实际开的空间大小是后面字符串的长度+1,你要想再在c后面连接字符串,实际上空间是不够的。所以也肯定会报错,越界访问了。 所以正确的做法是定义char c[1000] = “I love you!";里面的大小1000只要能确保能容纳待连接的字符串长度就行。
相关文章推荐
- 《c程序设计语言》读书笔记-5.3-指针实现strcat
- 《c程序设计语言》读书笔记-5.5-指针实现strncpy,strncat,strncmp
- 《c程序设计语言》读书笔记-5.5-指针实现strncpy,strncat,strncmp
- 《c程序设计语言》读书笔记-5.4-指针实现strend
- 《c程序设计语言》读书笔记-5.4-指针实现strend
- 练习 5-3 用指针实现函数strcat(s,t)将t指向的字符串复制到s指向的字符串的尾部。
- strcat strcpy 源代码,用指针去实现
- strcat,strcpy,strcmp,strlen4个常用字符串处理函数的数组与指针简单实现方法~
- C和指针之字符串简单实现 strcpy、strcat、strstr函数
- 《c程序设计语言》读书笔记(五)——指针与数组
- 《c程序设计语言》读书笔记-递归实现快速排序算法
- 《c程序设计语言》读书笔记-5.9-指针转换天数和日期
- 读书笔记--C 指针实现各项字符串操作
- 《c程序设计语言》读书笔记-5.6-指针重写getline等函数
- 读书笔记:自定义函数实现字符串处理函数----strlen、strcmp、strcat、strcpy
- 《c程序设计语言》读书笔记-5.6-指针重写getline等函数
- 用指针方式实现strcat(s,t)函数
- 《c程序设计语言》读书笔记-递归实现快速排序算法
- 《c程序设计语言》读书笔记-5.9-指针转换天数和日期
- 《TCP/IP详解,卷2:实现》读书笔记-深入mbuf的结构