#include <stdio.h>
#include <string.h>
#define N 5
char username[N+3][20]={"ana","sofia","maria","isabel","joao","hugo","francisco","pedro"};
char str[20];
read_username()
{
printf("Insert your username: ");
gets(str);
}
void searchusername(int n)
{
int i;
for(i=0;i<=n;i++)
{
if(strstr(username[i], str) != NULL)
printf("username exists")
}
}
int main()
{
read_username();
searchusername(8);
}
我有检查用户名是否存在的代码,但是我似乎无法解决这个问题,所以我只能在用户名不存在时获取printf,其他任何不使用NULL的方式也是可以的。
最佳答案
一个问题是您不能避免gets()
导致缓冲区溢出。对于本示例,我必须假设您输入的用户名不超过19个字符。如果您不考虑任何问题,那么更长的时间会引起问题。
更重要的是,您没有正确比较用户名。您不应为此目的使用strstr()
。它在另一个字符串中搜索子字符串,不比较字符串。例如,如果您键入ia
,则strstr()
将与sofia
和maria
都匹配,这两者对于用户名查找都是错误的结果。使用strcmp()
进行比较。
尝试类似这样的方法:
#include <stdio.h>
#include <string.h>
#define N 8
char* username[N] = {"ana", "sofia", "maria", "isabel", "joao", "hugo", "francisco", "pedro"};
char str[20] = {0};
void read_username()
{
printf("Insert your username: ");
if (fgets(str, 20, stdin))
{
int len = strlen(str);
if ((len > 0) && (str[len-1] == '\n'))
str[len-1] = '\0';
}
}
void searchusername()
{
for(int i = 0; i < N ; i++)
{
if (strcmp(username[i], str) == 0)
{
printf("username exists");
return;
}
}
printf("username does not exist");
}
int main()
{
read_username();
searchusername();
}
关于c - strstr == NULL不起作用,,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26821468/