函数

来源:互联网 发布:局域网监控软件排行 编辑:程序博客网 时间:2024/05/16 12:57

实现四个函数:

slen() - 求字符串的长度,若为空指针,则报错。

scpy() - 字符串拷贝,考虑缓冲区溢出,
成功返回目标缓冲区地址,
目标缓冲区无效时报错。

intmin() - 求两个整数的最小值,若二者相等,则报错。

intave() - 求两个整数的平均值,考虑求和溢出,
该函数不会失败。

#include <stdio.h>// 求字符串长度// 成功返回字符串长度,失败返回(size_t)-1size_t slen (const char* s) {    if (! s)        return -1;    size_t len;    for (len = 0; s[len]; ++len);    return len;}// 字符串拷贝// 成功返回目标字符串,失败返回NULLchar* scpy (char* dst, size_t size, const char* src) {    if (! dst || ! size)        return NULL;    size_t len = slen (src);    if (len == -1)        return NULL;    size_t i, chs = size - 1 < len ? size - 1 : len;    for (i = 0; i < chs; ++i)        dst[i] = src[i];    dst[i] = '\0';    return dst;}// 求整数最小值// 成功返回0,失败返回-1int intmin (int a, int b, int* min) {    if (a == b)        return -1;    *min = a < b ? a : b;    return 0;}// 求整数平均值// 成功返回参数整数的平均值,不会失败int intave (int a, int b) {//  return (a+b)/2;没有考虑溢出    return (a & b) + ((a ^ b) >> 1);}int main (void) {    size_t len = slen ("Hello World !");//  size_t len = slen (NULL);    if (len == -1)        printf ("求字符串长度失败!\n");    else        printf ("字符串长度:%u\n", len);    char dst[5];    if (! scpy (dst, sizeof (dst) / sizeof (dst[0]), "0123456789"))//  if (! scpy (NULL, 0, "0123456789"))        printf ("字符串拷贝失败!\n");    else        printf ("字符串副本:%s\n", dst);    int min;    if (intmin (-1, 0, &min) == -1)//  if (intmin (-1, -1, &min) == -1)        printf ("求整数最小值失败!\n");    else        printf ("整数最小值:%d\n", min);    printf ("整数平均值:%d\n", intave (1234, 5678));    return 0;}
0 0