MST

星途 面试题库

面试题:C语言安全字符串处理函数在动态内存分配场景中的应用

假设你在C语言程序中使用动态内存分配(如malloc)来创建一个用于存储字符串的缓冲区。请结合安全字符串处理函数(如snprintf),编写一个函数,该函数接受一个源字符串和目标缓冲区大小作为参数,将源字符串安全地复制到动态分配的目标缓冲区中,并处理可能出现的内存分配失败和字符串截断等情况,最后释放相关内存。
34.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* safe_strcpy(const char* src, size_t dest_size) {
    char* dest = (char*)malloc(dest_size);
    if (dest == NULL) {
        fprintf(stderr, "Memory allocation failed\n");
        return NULL;
    }
    size_t ret = snprintf(dest, dest_size, "%s", src);
    if (ret >= dest_size) {
        // 字符串截断处理
        dest[dest_size - 1] = '\0';
        fprintf(stderr, "String truncated\n");
    }
    return dest;
}

int main() {
    const char* source = "Hello, World!";
    size_t size = 10;
    char* result = safe_strcpy(source, size);
    if (result != NULL) {
        printf("Copied string: %s\n", result);
        free(result);
    }
    return 0;
}