zoukankan      html  css  js  c++  java
  • C字符串末尾的''问题

    C语言的字符串要注意最后一位默认是'/0'的问题。这是一个易错点。

    strlen()计算长度时不考虑末尾的''

    //例1
    void test1()
    {
     char string[10];
     char* str1 = "0123456789";
     strcpy( string, str1 );
    }
    string定义的长度是10,str1的最后一位默认为'',所以str1其实长度为11。strcpy()函数中,如果第二个串比第一个串长,是没有error的,第一个串的长度会增加,并且也可以正确的输出第一个串。
    但是存在潜在的内存错误的问题,也就是说,在内存中,如果紧接string之后有内容,将被覆盖,这样会导致string之后的内存存取错误。
    来看一个好的写法:
    void test2()
    {
        char string[10], str1[10];
        int i;
        for(i=0; i<9; i++)
        {
            str1[i]  = 'a';
        }
        str1[9] = '';//体现水平的一步
        strcpy( string, str1 );
    }

    有的时候可能非常容易忽略这个小问题:

    //例2
    void test3(char* str1)
    {
     if(str1 == NULL){
            return ;
     }
     char string[10];
     if( strlen( str1 ) <= 10 )
     {
     strcpy( string, str1 );
     }
    }

    这里if( strlen( str1 ) <= 10 )应该写成if( strlen( str1 ) < 10 ),因为strlen的结果未统计’’所占用的1个字节。

  • 相关阅读:
    Java1:Chapter3
    css3圆角和阴影效果
    css3兼容各版本浏览器前缀
    DOM
    数组方法
    Math方法
    JSON
    字符串方法
    日期对象
    定时器
  • 原文地址:https://www.cnblogs.com/zywscq/p/5361945.html
Copyright © 2011-2022 走看看