我必须做一个将两个字符串链接在一起的程序,这就是我所做的:
我已经初始化了两个变量,它们应该存储字符串的长度。我检查了 NULL 指针异常。我数过琴弦。我已经动态分配了足够的内存来存储每个字母,以及 NULL 指针。我已将每个字符放入结果字符串中。
但是这些行中存在缓冲区溢出问题:
for (size_t i = 0; i < nprime; i++) {
result[i] = first[i];
}
这不是我第一次遇到这种错误/警告,每次遇到这种警告我都不知道如何进一步解决它,即使我尝试将变量类型从较小的更改为较宽的一、问题依旧。
当你遇到这种错误时,你的方法是什么?你会怎么做才能修复它?你有清单吗?
这是最小的可重现示例:
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] != '\0'; i++) {
nprime++;
}
for (size_t i = 0; second[i] != '\0'; 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;