前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于0和\0的区别?!

关于0和\0的区别?!

作者头像
薛定谔方程难
发布2024-01-23 16:15:01
880
发布2024-01-23 16:15:01
举报
文章被收录于专栏:我的C语言我的C语言

这应该是我的第一篇文章关于我在写代码的过程中出现的问题,以后的话,这个栏目还是会继续更新的,随着我的代码越写越多,这种文章肯定不会少的,为了能够一眼看出来,这篇文章到底是什么类型的错误,标题名字,就不弄的那么没头没脑的了,就不按照顺序来编标题了。

问题的发现

在写代码的过程中,我是时不时会遇到一些问题,但是,仔细想想,其实这些也是我应该注意到的细节。 在关于一篇文章中就这文章里面,关于strncat的while循环那段纠结了半天,但是在想,到底是什么原因,导致了我这个代码居然什么都显示不出来?这时候,我陷入了沉思,但是其实,除了while的循环,我也应该没什么地方错了,当我把里面的改为==*arr1++!=‘0’的时候==意外的发现了程序居然运行成功了,那么我就开始思考,到底是什么为什么,难道while循环的条件,不是判断里面的内容是否为真还是假吗? 然后我搜索了一下while,大概就是下面这段,展示的是while的进行流程。

在这里插入图片描述
在这里插入图片描述

那,看到这里,我情不自禁的想起来我在原来的函数里面,写的是什么?我写的好像是直接 *arr1,但是,原本那段数组是字符串,最后的位置是’\0‘而不是0,那我这就开始怀疑,有了疑问。

解决问题

关于我以为0和‘\0’其实是差不多的,因为在ASCII码表里面0的位置就是‘\0’。但是,其实真正一样的其实是数字0和字符‘\0’而不是字符0和‘\0’,还是得注意一下的。字符0的ASCII码值是48,和‘\0’完全不同。 所以千万不能把这几个长得像0的给弄混淆了,一定要在循环里面真正的理解每一个的含义,不然一不小心,都会成为死循环,或者说错误的结果。 下面就是一段例子,通过这个代码来理解一下,数字0转化为‘\0’的过程。

代码语言:javascript
复制
char* mystrncat(char* dst, const char* src, size_t n)
{
    char* tmp = dst;

    while (*dst)
    {
        dst++;
    }
    int i;
    for (i = 0; src[i] && i < n; i++)
    {
        dst[i] = src[i];
    }

    dst[i] = 0;//这里是数字0也就相当于是‘\0’
    return tmp;
}
int main()
{
    char arr1[10] = "asc";
    char arr2[] = "asd";
    char* ret = mystrncat(arr1, arr2,2);
    printf("%s", ret);
    return 0;
}

其中的那段话,就是运用了数字0变为终止的‘\0’。

在这里插入图片描述
在这里插入图片描述

结果也同样是正确的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题的发现
  • 解决问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档