C语言常用的代码

C语言经常需要发明各种轮子,为方便以后能够把精力放在应用逻辑上而不在发明轮子上,把一些常用的代码片段列于此。

首先是字符串处理方面的,strcpy 函数容易越界,习惯使用 strncpy 函数,但此函数只管复制最多 n 个字符,并不会把末尾的字符自动修改为 '\0',所以给它加上这个操作:

char* utils_strncpy (char *dest, const char *src, size_t length)

{

strncpy (dest, src, length);

dest[length] = '\0';

return dest;

} 内存分配函数 malloc 分配内存却不进行初始化,给它也加上初始化的操作:

void* utils_malloc (size_t size)

{

void *ptr = malloc (size);

if (ptr != NULL)

memset (ptr, 0, size);

return ptr;

} 内存释放函数 free 只是释放内存,却不把指针置为空指针,而且对空指针执行 free 也不知道是否安全,于是改造如下:

void utils_free(void **p)

{

if (p == NULL || *p == NULL)

return;

free(*p);

*p = NULL;

}

相应的有字符串复制函数:

char* utils_strdup (const char *ch)

{

char *copy;

size_t length;

if (ch == NULL)

return NULL;

length = strlen (ch);

copy = (char *) utils_malloc (length + 1);

if (copy==NULL)

return NULL;

utils_strncpy (copy, ch, length);

return copy;

}

把字符串中的大写字母改为小写:

int utils_tolower (char *word)

{

size_t i;

size_t len = strlen (word);

for (i = 0; i <= len - 1; i++)

{

if ('A' <= word[i] && word[i] <= 'Z')

word[i] = word[i] + 32;

}

return 0;

} 清除字符串首尾的空白字符(空格,\r,\n,\r):

int utils_clrspace (char *word)

{

char *pbeg;

char *pend;

size_t len;

if (word == NULL)

return -1;

if (*word == '\0')

return 0;

len = strlen (word);

pbeg = word;

while ((' ' == *pbeg) || ('\r' == *pbeg) || ('\n' == *pbeg) || ('\t' == *pbeg))

pbeg++;

pend = word + len - 1;

while ((' ' == *pend) || ('\r' == *pend) || ('\n' == *pend) || ('\t' == *pend))

{

pend--;

if (pend < pbeg)

{

*word = '\0';

return 0;

}

}

/* Add terminating NULL only if we've cleared room for it */

if (pend + 1 <= word + (len - 1))

pend[1] = '\0';

if (pbeg != word)

memmove (word, pbeg, pend - pbeg + 2);

return 0;

}
posted @   代号奶茶  阅读(556)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示