关于字符串后面加'\0'的误区[str[i]='\0';]——基于谭浩强答案链接两个字符串,不使用strcat函数之例
来源:互联网 发布:中卫的云计算基地 编辑:程序博客网 时间:2024/05/23 15:41
首先感谢论坛里大神的帮助:传送门:http://bbs.bccn.net/viewthread.php?tid=473045&pid=2608109&page=2#pid2608109
然后上谭浩强这个题答案的程序代码,代码如下:
#include<stdio.h>#include<string.h>int main(){char s1[80], s2[40];int i = 0, j = 0;printf("Input s1:\n");scanf_s("%s", s1, 80);printf("\n");printf("Input s2:\n");scanf_s("%s", s2, 40);while (s1[i] != '\0') i++;while (s2[j] != '\0') s1[i++] = s2[j++]; s1[i] = '\0'; printf("\nThe new string is:\n");printf("%s", s1);printf("\n");return 0;}
这里关键是理解
while (s1[i] != '\0')
i++;
while (s2[j] != '\0')
s1[i++] = s2[j++];
s1[i] = '\0';
i++;
while (s2[j] != '\0')
s1[i++] = s2[j++];
s1[i] = '\0';
这几行,假设s1输入123,s2输入456,那么,在执行完while (s2[j] != '\0')之后,s1[i]中的i会是几呢?
为了便于理解,对这几行做如下调整
while (s1[i] != '\0')
{
{
i++;
}
while (s2[j] != '\0')
while (s2[j] != '\0')
{
s1[i] = s2[j];
s1[i] = s2[j];
i++;
j++;
}
s1[i] = '\0';
s1[i] = '\0';
这样做好处是便于理解,首先,在执行完第一个while后,i的值是3,这是因为当(s1[2]=3)!='\0'时候,执行了i++,所以i=3,进入到下一个while里,同理,当执行完这一轮的while后,i的值是6,而s1[5]=6,是因为i执行i++;但是最后一个字符确实是s1[5],到了这里,会产生如下问题:
1.输出的s1[5]后面到底有没有'\0'?如果没有,为什么s1[5]不会去执行上面的那个条件,即while (s1[i] != '\0') ?如果有,为什么下面还要加一个s1[i] = '\0';?
2.s1[i] = '\0';中的s1[i]到底是什么?是代表整个字符串s1[i] ?还是s1[i] 中的某一个值?
对此,楼楼首先回答第一个问题,首先,由于执行了s1[i] != '\0'和s2[i]! = '\0'字符串数组中是不带'\0'的,其次,由于两个while之间是平行关系,而不是嵌套关系,所以执行顺序是自上而下进行的,这样,当执行了s1[5]=6之后是不会去执行while (s1[i] != '\0')的,而while (s2[j] != '\0') 执行跳出后既然不会跳到上面去,那么他会紧接着执行s1[i] = '\0',由于在上面的while循环里,i++了,所以这里的i=6,即s1[6]='\0',意思就是在字符串后面加了'\0'。
对此,很多人都有两个理解误区:
第一是针对新手,很容易错误理解两个while之间的关系,从而造成计算错误。
第二是针对这个s1[i] = '\0',这里很多人都把s1[i] 想当然理解为了整个的字符串,实际上,经过上面的说明,这里的s1[i] = '\0'表示的是某一个特定的值,再换个例子,如果是for循环呢?请看:
for(x;y;x++)
{}
s1[i] = '\0';
不知道诸位看到上面那个x++了吗?正是由于这个缘故,下面表示的是字符串的某一特定的值被赋予了'\0'
0 0
- 关于字符串后面加'\0'的误区[str[i]='\0';]——基于谭浩强答案链接两个字符串,不使用strcat函数之例
- 140.字符串链接(不使用strcat)
- C语言 不使用strcat函数实现连接两个字符串功能
- 第十六周—C语言 (字符串比较—不使用strcat函数)
- strcat函数——字符串连接函数
- 实现两个字符串的连接(strcat函数)
- 连接两个字符串不用strcat函数
- 两个字符串连接,不用strcat函数
- 两个字符串拼接(不用strcat函数)
- 输入两个字符串,不用系统提供的函数strcat,自定义函数将两个字符串连接起来。
- HDU 1062 逆转字符串。 换行符判断使用 str[i] == '\0'
- 下面的函数统计子字符串substr在字符串str中出现的次数,如果substr在str中不出现,则返回值0
- Strcat链接俩字符串
- strcat 拼接两个字符串
- str类函数的实现0.2——strcat/strncatstr
- 编写一个函数,将两个字符串连接起来。(不能用strcat函数)。
- strcat()连接两个字符串的问题分析
- strcat()连接两个字符串的问题分析
- 网络数据包捕捉工具jNetPcap学习笔记(一)
- WinMM库在x64下无法录音
- 初探Go语言网络库的基础实现
- 关于工作宝APP的对数据库加密的方案建立过程分享
- 阅读图像显著性检测论文七:Graph-Based Visual Saliency
- 关于字符串后面加'\0'的误区[str[i]='\0';]——基于谭浩强答案链接两个字符串,不使用strcat函数之例
- Java写出杨辉三角
- 101. Symmetric Tree
- 利用卷积神经网络识别骰子点数
- 5-5 是不是太胖了 (5分)
- jQuery插件开发的两种方法及$.fn.extend 定制列表
- Android查缺补漏之Toolbar
- 3.AbstractFactory-抽象工厂模式
- 查看flash分区命令小结