问题描述
我最近开始学习基本的 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] != '\0') {
p = -1;
printf("\nwrong\n");
}
}
} else {
p =- 1;
printf("\nwrong\n");
}
}
} else {
p = -1;
printf("\nwrong\n");
}
return;
}
解决方法
您可以测试偏移量 i < strlen(e)
处的字节是否不是空终止符:i
,而不是比较 e[i] != '\0'
。
您也可以在函数的开头计算字符串的长度,并将其存储到 len
变量中。
你唯一能做的就是实现你自己的 strlen 函数。
在 C 中,字符串是以空字符结尾的字符数组,也就是说,数组的最后一个字符是 '\0'(零)。 strlen 函数遍历字符数组直到找到一个空字符,它返回该数组的长度,不包括空字符。
要复制(创建)一个 c 字符串,您必须执行以下操作:
char *str = malloc(strlen(another_string) + 1);
str[strlen(another_string)] = '\0';
strlen 示例:
size_t my_strlen(const char *str)
{
if (!str) return 0;
size_t n = 0;
for (; *str; ++n,++str);
return n;
}
,
您可以创建自己的 my_strlen :)
unsigned int my_strlen(char *str)
或
当您的字符与 '\0' (空字节)不同时,您可以循环。所以只需将 strlen(e)
替换为 e[i] != '\0'
应该没问题