如何解决 c 程序中的缓冲区溢出 error/warning(像这个)?

How to solve a buffer overrun error/warning in a c program (like this one)?

我必须编写一个 link 两个字符串在一起的程序,这是我所做的:

我已经初始化了两个变量,它们应该存储字符串的长度。 我已经检查了 NULL 指针异常。 我数过琴弦。 我已经动态分配了足够的内存来存储每个字母,加上 NULL 指针。 我已将每个字符放入结果字符串中。

但是这些行中存在缓冲区溢出问题:

for (size_t i = 0; i < nprime; i++) {
        result[i] = first[i];
    } 

我不是第一次遇到这种error/warning,每次遇到这个警告我都不知道如何进一步解决它,即使我尝试更改变量类型从小到大,问题依旧

遇到这种错误你是怎么处理的?你会怎么做来修复它? 你有清单吗?

这是最小的可重现示例:

char* link( const char* first, const char* second) {
    size_t nprime = 0; 
    size_t nsecond = 0; 

    if (first == NULL) {
        return NULL; 
    }
    if (second == NULL) {
        return NULL; 
    }
    for (size_t i = 0; first[i] != '[=12=]'; i++) {
        nprime++; 
    }
    for (size_t i = 0; second[i] != '[=12=]'; i++) {
        nsecond++; 
    }
    char* result = malloc(nprime + nsecond + 1); 
    if (result == NULL) {
        return NULL; 
    }

    for (size_t i = 0; i < nprime; i++) {
        result[i] = first[i]; 
    }
    for (size_t i = 0; i < nsecond; i++) {
        result[nprime + i] = second[i]; 
    }
    result[nprime + nsecond] = 0; 

    return result; 

size_t 添加中可能溢出的文本:

// nprime + nsecond + 1
size_t sum = nprime + nsecond + 1u;  // Unsigned math wraps on overflow

// Check if overflow occurred 
if (sum <= nprime) {
  return NULL;   // length too long
}

// char* result = malloc(nprime + nsecond + 1); 
char* result = malloc(sum);