首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >嵌入式八股文之c语言相关函数的实现(建议收藏!!!)

嵌入式八股文之c语言相关函数的实现(建议收藏!!!)

作者头像
紫昭
发布2025-11-29 08:48:21
发布2025-11-29 08:48:21
850
举报

strcpy函数实现:

使用c语言实现strcpy函数:

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>

// 自定义字符串复制函数,添加了错误检查
void my_strcpy(char* dest, char* src, size_t dest_size) {
    // 检查目标字符串的空间是否足够容纳源字符串
    if (strlen(src) + 1 > dest_size) {
        // 若空间不足,打印错误信息
        fprintf(stderr, "Error: Destination buffer is too small.\n");
        return;
    }
    // 复制源字符串到目标字符串
    while (*src) {
        *dest++ = *src++;
    }
    // 在目标字符串末尾添加字符串结束符
    *dest = '\0';
}

int main() {
    char mydest[20];
    char mysrc[20] = "zizhao";
    // 调用自定义的字符串复制函数,传入目标字符串、源字符串和目标字符串的大小
    my_strcpy(mydest, mysrc, sizeof(mydest));
    // 打印复制后的目标字符串
    printf("%s", mydest);
    return 0;
}

通过比较 strlen(src) + 1 和 sizeof(dest),可以判断目标字符串数组是否有足够的空间来存储源字符串及其结束符。如果 strlen(src) + 1 大于 sizeof(dest),说明目标数组的空间不足以完整存放源字符串,此时若进行复制操作,就会发生缓冲区溢出,可能导致程序崩溃或产生未定义行为。因此,在复制字符串之前进行这样的检查是很有必要的,能够避免潜在的错误。

strcmp函数实现:

使用c语言实现strcmp函数:

代码语言:javascript
复制
#include <stdio.h>
// 自定义的字符串比较函数
int my_strcmp(char* dest, const char* src)
{
    // 循环比较两个字符串的每个字符
    while (*dest != '\0' && *src != '\0') {
        if (*dest != *src) {
            // 如果当前字符不相等,返回它们 ASCII 值的差值
            return *dest - *src;
        }
        // 移动到下一个字符
        dest++;
        src++;
    }
    // 处理其中一个字符串先到达结束符的情况
    return *dest - *src;
}

int main()
{
    char str1[] = "abc";
    char str2[] = "abd";
    int result = my_strcmp(str1, str2);
    if (result == 0) {
        printf("两个字符串相等\n");
    }
    else if (result < 0) {
        printf("str1 小于 str2\n");
    }
    else {
        printf("str1 大于 str2\n");
    }
    return 0;
}

my_strcmp 函数用于比较两个字符串。它会按字典序逐个字符比较两个字符串,直到遇到不同的字符或者字符串结束符 '\0'。函数返回值规则如下:

如果 dest 和 src 相等,返回 0。

如果 dest 小于 src,返回一个负数。

如果 dest 大于 src,返回一个正数。

strcat函数实现:

使用c语言实现strcat函数:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* my_strcat(const char* fir, const char* end)
{
    // 保存字符串的大小来进行内存的分配
    size_t length1 = strlen(fir);
    size_t length2 = strlen(end);
    //进行加1操作是为了字符串结束符'\0'
    char* list = (char*)malloc((length1 + length2 + 1) * sizeof(char));
    if (list == NULL)
    {
        fprintf(stderr, "内存分配失败");
        return NULL;
    }
    char* temp = list; // 保存起始地址 
    while (*fir)
    {
        *list++ = *fir++;
    }
    while (*end)
    {
        *list++ = *end++;
    }
    *list = '\0';
    return temp;
}

int main()
{
    const char str1[] = "abc";
    const char str2[] = "def";
    char* result = my_strcat(str1, str2);
    //先对返回结果判断一下
    if (result != NULL) {
        printf("拼接后的字符串: %s\n", result);
        free(result);
    }
    return 0;
}

希望大家都能够去简单的动手操作一下,或许不是你想象的那样信手拈来哦

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • strcpy函数实现:
  • strcmp函数实现:
  • strcat函数实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档