在 C 中,如果我不想使用字符串函数,我可以使用什么来代替 strlen?

In C , what can I use instead of strlen if I don't want to use a string function?

我最近开始学习基本的 C,但我仍然对它一窍不通,我开始做一些学习项目,我正在使用库函数,但我对其他方法很感兴趣...

所以我有一个电子邮件验证,它工作正常,但我想在没有 strlen 的情况下进行验证,任何建议我可以做什么而不是 strlen

void mail(char e[]) {
    int count = 0;
    int countb = 0;
    int i, j;
    int t, t2;
    int p = 0;

    for (i = 0; i < strlen(e); i++) {
        if (e[i] == '@') {
            count++;
            t = i;
        }
    }
    if (count == 1) {
        for (j = 0; j < t; j++) {
            if (!(e[j] == '_' || e[j] == '.' || isalpha(e[j]) || isdigit(e[j]))) {
                p = -1;
                printf("\nwrong\n");
                break;
            }
        }
        if (p == 0) {
            for (i = t; i < strlen(e); i++) {
                if (e[i] == '.') {
                    t2 = i;
                    countb++;
                }
            }
            if (countb == 1) {
                for (i = 0; i < t2 && i > t2; i++) {
                    if (!(isalpha(e[i]))) {
                        p = -1;
                        printf("\nwrong\n");
                        break;
                    } else {
                        p = 1;
                    }
                }
                if (p == 1) {
                    if (e[t2 + 3] != '[=10=]') {
                        p = -1;
                        printf("\nwrong\n");
                    }
                }
            } else {
                p =- 1;
                printf("\nwrong\n");
            }
        }
    } else {
        p = -1;
        printf("\nwrong\n");
    }
    return;
}

您可以创建自己的 my_strlen :)

unsigned int      my_strlen(char *str)

当你的字符与'\0'(空字节)不同时,你可以循环。所以只需将 strlen(e) 替换为 e[i] != '[=12=]'

它应该工作得很好

你唯一能做的就是实现你自己的 strlen 函数。

在 C 语言中,字符串是以 null 结尾的字符数组,也就是说,数组的最后一个字符是 '\0'(零)。 strlen 函数遍历字符数组,直到找到空字符,它 returns 该数组的长度,不包括空字符。

要复制(创建)C 字符串,您必须执行以下操作:

char *str = malloc(strlen(another_string) + 1);
str[strlen(another_string)] = '[=10=]';

strlen 示例:

size_t my_strlen(const char *str)
{
    if (!str) return 0;
    size_t n = 0;
    for (; *str; ++n, ++str);
    return n;
}

您可以测试偏移量 i 处的字节是否不是空终止符,而不是比较 i < strlen(e)e[i] != '[=12=]'.

您也可以在函数的开头只计算一次字符串的长度,并将其存储到 len 变量中。