关于0和的区别?!

2024-01-23 16:15:01 浏览数 (1)

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

问题的发现

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

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

解决问题

关于我以为0和‘’其实是差不多的,因为在ASCII码表里面0的位置就是‘’。但是,其实真正一样的其实是数字0和字符‘’而不是字符0和‘’,还是得注意一下的。字符0的ASCII码值是48,和‘’完全不同。 所以千万不能把这几个长得像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也就相当于是‘’
    return tmp;
}
int main()
{
    char arr1[10] = "asc";
    char arr2[] = "asd";
    char* ret = mystrncat(arr1, arr2,2);
    printf("%s", ret);
    return 0;
}

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

结果也同样是正确的。

0 人点赞