C++:取消引用NULL指针警告

zqry0prt  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(121)

我试图重新创建strcat函数作为初学者,警告显示在行上:

dest[i] = src[j];

个字符
我在Visual Studio 2022中遇到了这个警告,代码成功执行,并且警告没有显示在输出窗口或错误列表中。但在代码窗口中,它加了下划线并显示“解引用NULL指针'dest'”

kyvafyod

kyvafyod1#

如果dest为nullptr,则不会提前中止该函数。这就是为什么你得到一个编译器警告。如果调用strCat(nullptr, "foo"),您肯定会崩溃。尽管正如其他人所说,实际的strcat可能不会检查任何一个指针参数是否为null。
更多专业提示:

  • 您不需要调用strLen。尤其是src。只要src指向空字符,就可以退出复制循环。
  • strcat应该返回dest

很简单,我们可以这样做:

char* strCat(char* dest, const char* src) {
        char* result = dest;

        // validate parameters
        if ((dest == nullptr) || (src == nullptr)) {
            return result;
        }

        // advance dest to the existing null char
        while (*dest != '\0') {
            dest++;
        }

        // copy loop
        while (*src != '\0') {
            *dest = *src;
            dest++;
            src++;
        }

        // make dest null terminated
        *dest = '\0';
        return result;
}

字符串

相关问题