我在课堂上练习,我必须复制C中的strstr()
函数(来自<string.h>
库)。这是我的代码
char *ft_strcpy(char *dest, char *src)
{
int i;
i = 0;
while (src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
return (dest);
}
此代码功能齐全但是当我尝试使用小于dest
字符串的src
字符串时,它会显示一个不可预测的结果,最终也会覆盖src
。原始strstr()
函数的答案是在该情况下中止程序。鉴于我无法使用abort()
函数,如何让我的程序中止?
答案 0 :(得分:0)
你必须检查你的字符串。 可能是其中一个是NULL。
当你这样做时:While (str[i] ..)
你不知道(str)是否为NULL。
做:
While (str && str[i] != '\0')
它更好。
您还可以检查dest是否为malloc罚款,因为如果您没有任何内存用于字符串,则无法分配值。
答案 1 :(得分:0)
我建议一个紧凑的实现
char * ft_strcpy(char * dest, const char * src) {
if (strlen(dest) < strlen(src)) { /* abort(); or exit(1); */ }
char * s = dest;
while (*dest++ = *src++);
return s;
}
实际边界检查是在strcpy
的更安全版本中实现的,即strcpy_s
。您可以在Safe C Library中找到实现。