strcat从char *转换为const char *

时间:2016-04-27 21:51:19

标签: c c-strings

我正在编写一个自定义包装器,通过尝试记住堆大小分配到地址,以更安全的方式实现strcat,strcpy等。例如,如果malloc(100)返回指针p,strcat将检查p处的当前字符串大小,如果它记住malloc中的p,则安全地转换为strncat。这是我的实施:

#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
#include <string.h>
#include "linkedlist.h"

List * ptrSizes;

char *(*libc_strcat)(char * , const char * );

char* strcat(char * dest, const char * src){
    printf("Called strcat\n");
    if (ptrSizes == NULL) {
        ptrSizes = createList();
    }
    if (libc_strcat == NULL) {
        libc_strcat = dlsym(RTLD_NEXT, "strcat");
    }
    // Assume node returns the saved mapping correctly      
    Node* node = findInList(ptrSizes, dest);
    if (node != NULL){
        size_t curr_sz = strlen(dest);
        size_t left = node -> max_sz - curr_sz - 1;
        if (left > 0) {
            printf("Copying %zd bytes with strncat\n", left);
            dest = strncat(dest, src, left);
        }
        else{
            printf("No copy to prevent overflow\n");
        }
    }
    else{
        // no memory of malloc. Can't help yet
        dest = libc_strcat(dest, src);
    }
    return dest;
}

现在我的问题是,在任何测试文件中,strcat(dest, "Hello World");都不会调用我的包装器strcat,而是

char src[]="Hello World";
strcat(dest, src);

正确调用我的包装器。我无法删除const关键字,因为它使得它与string.h中的声明不符。

我能做什么才能将两个电话都转到我的包装器上?

0 个答案:

没有答案