C字符串末尾的'/0'问题

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

strlen()计算长度时不考虑末尾的‘\0‘

//例1
void test1()
{
 char string[10];
 char* str1 = "0123456789";
 strcpy( string, str1 );
}

string定义的长度是10,str1的最后一位默认为‘\0‘,所以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] = ‘\0‘;//体现水平的一步
    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的结果未统计’\0’所占用的1个字节。

C字符串末尾的'/0'问题

时间: 2024-10-12 08:00:59

C字符串末尾的'/0'问题的相关文章

Java:去掉 字符串开头的 0;去掉 字符串 末尾的 0

public static void main(String[] args) { // TODO Auto-generated method stub /* 去掉 字符串  开头的 0 */ String s = "00123000"; //方法1:String --> Integer //String str = String.valueOf(Integer.parseInt(s)); //方法2:正则 //String str = s.replaceAll("^(0

A题之字符串末尾补0

按要求分解字符串,输入两个数M,N:M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0.例如:输入2,8, "abc" ,"123456789",则输出为"abc00000","12345. 678","90000000" 思路: 1)对每一个字符串的长度取模length%N,在字符串末尾补(N-length%N)个0 2)将所有字符串补0后的字符串拼接在一起 3)拼接后的字符串按照M长度,分段

NYOJ1026 阶乘末尾非0 【模板】

阶乘末尾非0 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 我们的问题很是简单,n!末尾非0数是几? 比如n=5的时候,n!=120,那么n!末尾非0数是2. 输入 多组数据, 每组数据占一行,每行一个整数0<=n<=10^1000 输出 n!末尾非0数. 样例输入 5 样例输出 2 直接用的网上的模板 /*==================================================*| 阶乘最后非零位,复杂度 O(nlogn) \*==

C# 移除字符串末尾指定字符

#region 移除字符串末尾指定字符 /// <summary> /// 移除字符串末尾指定字符 /// </summary> /// <param name="str">需要移除的字符串</param> /// <param name="value">指定字符</param> /// <returns>移除后的字符串</returns> public static s

每天一个JavaScript实例-去除字符串末尾的空白

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-去除字符串末尾的空白</title> <script> function white(){ var input = document.ge

Light oj 1138 - Trailing Zeroes (III) 【二分查找 &amp;&amp; N!中末尾连续0的个数】

1138 - Trailing Zeroes (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*...*N. F

求N!末尾的0的个数--找规律+递归

0\'s Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代表测试数据个数(T<=20).接下来T行每行1个数代表n(0<=n< 2^31). 输出 对于每个测试数据输n!末尾有多少个0,每行输出一个结果. 示例输入 3 1 5 10 示例输出 0 1 2 提示 中国海洋大学第三届"朗讯杯"编程比赛高级组试题 声明(摘抄至某前辈)--

javascript中去掉字符串前面的0

var str = "00012300325300"; str = str.replace(/\b(0+)/gi,""); // 去掉字符串前面的0 document.write("str=" + str + "</br>"); 上面代码中replace的正则表达式就是去掉字符串前面的0 javascript中去掉字符串前面的0,布布扣,bubuko.com

输出末尾的0或者小数点

/*    输出末尾的0或者小数点     默认输出会省略掉末尾的0,我们可以用setf(ios_base::showpoint)函数输出末尾的0或者小数点         注:showpoint可以输出结尾的0或者小数点,且默认使用precision(6) */ #include <iostream> using namespace std; int main() { float price=401.60f; cout<<price<<endl; //默认输出,省略末