C语言错误计算数组长度

将数组传递给函数时,一定要同时传递数组长度。这个信息帮助函数避免越过数组边界。在下面的replace函数中,将字符串的地址随着替换用的字符以及缓冲区长度一块传入,函数的目的是把字符串中所有的字符都替换为传入的字符,直到NUL字符。长度参数防止函数越过缓冲区写入:

void replace(char buffer[], char replacement, size_t size) {
    size_t count = 0;
    while(*buffer != NUL && count++<size) {
        *buffer = replacement;
        buffer++;
    }
}

在下面的代码中,name数组最多只能装7个字符再加上NUL字符。不过,我们有意越过数组边界写入来说明replace函数的工作原理。我们给replace函数传递了name和替换字符+

char name[8];
strcpy(name,"Alexander");
replace(name,'+',sizeof(name));
printf("%s\n", name);

执行代码后得到如下输出:

++++++++r

只是向数组添加了8个加号,strcpy函数允许缓冲区溢出,但是replace函数不允许,前提还是假设传入的长度信息有效。要谨慎使用strcpy这类不传递缓冲区长度的函数。传递缓冲区长度能提供额外的安全屏障。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程