如何让我的程序中止(没有任何lib)

时间:2015-07-15 08:25:28

标签: c

我在课堂上练习,我必须复制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()函数,如何让我的程序中止?

2 个答案:

答案 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中找到实现。