我试图重新创建strcat函数作为初学者,警告显示在行上:
dest[i] = src[j];
个字符我在Visual Studio 2022中遇到了这个警告,代码成功执行,并且警告没有显示在输出窗口或错误列表中。但在代码窗口中,它加了下划线并显示“解引用NULL指针'dest'”
kyvafyod1#
如果dest为nullptr,则不会提前中止该函数。这就是为什么你得到一个编译器警告。如果调用strCat(nullptr, "foo"),您肯定会崩溃。尽管正如其他人所说,实际的strcat可能不会检查任何一个指针参数是否为null。更多专业提示:
dest
strCat(nullptr, "foo")
src
很简单,我们可以这样做:
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; }
字符串
1条答案
按热度按时间kyvafyod1#
如果
dest
为nullptr,则不会提前中止该函数。这就是为什么你得到一个编译器警告。如果调用strCat(nullptr, "foo")
,您肯定会崩溃。尽管正如其他人所说,实际的strcat可能不会检查任何一个指针参数是否为null。更多专业提示:
src
。只要src
指向空字符,就可以退出复制循环。dest
很简单,我们可以这样做:
字符串