标题:在学习字符数组中,碰到'\0',求解释的清楚点(看下面程序)
只看楼主
s人圭日月
Rank: 2
等 级:论坛游民
帖 子:36
专家分:27
注 册:2016-6-22
结帖率:50%
已结贴  问题点数:30 回复次数:5 
在学习字符数组中,碰到'\0',求解释的清楚点(看下面程序)
# include <stdio.h>
# include <string.h>

int link(char str1[40],char str2[40],char str3[80])
{
    int i,n=0,k;
    for (i=0;i<strlen(str1);i++)
    {
        str3[i]=str1[i];
        n++;
    }
    k=i;
    for (i=0;i<strlen(str2);i++)
    {
        str3[k+i]=str2[i];
        n++;
    }
    str3[i]='\0';//这段代码我知道是可有可无,但是有了的话好处是什么。谢谢
    return n;
}
void main(void)
{
    char str1[40],str2[40],str3[80];
    int n;
    printf("请输入字符串1\n");
    gets(str1);
    printf("请输入字符串2\n");
    gets(str2);
    n=link(str1,str2,str3);
    printf("字符个数为%d\n",n);

}
搜索更多相关主题的帖子: include return 字符串 include return 字符串 
2016-08-04 20:20
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
是 str3 = str1 + str2 的话,
str3[i]='\0'; 就改为 str3[k+i]='\0';
这句代码是不可无,'\0'是str3的结束标志。
2016-08-04 21:31
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:20 
你的这个代码里面,那是真的可有可无。(你用str[i]='\0'也是不对的,应该改成str[k+i]='\0')
如果是输出str[3]那就看情况了。
‘\0’作为判断字符串结束的标记,以字符串输出时如果编译器找不到结束的标记,就会产生乱码。
如果知道字符串有几个字符组成,以单个字符输出到是可以不用加‘\0’。
就像你写的代码,因为知道有n个,所以只要输出n个字符,此时加不加‘\0’对输出没有影响。
2016-08-04 23:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <stdio.h>

int link( const char* str1, const char* str2, char str3[] )
{
    char* p = str3;
    for( ; *str1; *p++=*str1++ );
    for( ; *p++=*str2++; );
    return p-str3-1;
}
2016-08-05 08:23
cppyjou
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:16
注 册:2016-8-4
得分:5 
'\0'是字符串结束的标志,你输入的字符不够多,所以感觉可有可无,你str1[]里面有40个字符str1[0]-str1[39],那么你要在字符串最后有一个位置给'\0'作为字符串结束的标志,如果输入39个字符,那么str[39]这个位置就会用来存放'\0',如果40个都是字符甚至更多,会有越界的报错。
2016-08-05 11:12
s人圭日月
Rank: 2
等 级:论坛游民
帖 子:36
专家分:27
注 册:2016-6-22
得分:0 
回复 3楼 linlulu001
谢谢!
2016-08-07 17:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467543-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.225412 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved