strstr == NULL不起作用,

弗朗西斯科·席尔瓦(Francisco Silva)
#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的方式也都可以。

雷米·勒博(Remy Lebeau)

一个问题是您不能避免使用导致缓冲区溢出gets()在此示例中,我必须假设您输入的用户名不超过19个字符。如果您不考虑任何问题,那么更长的时间会引起问题。

更重要的是,您没有正确比较用户名。您不应该将其strstr()用于此目的。它在另一个字符串中搜索子字符串,不比较字符串。例如,如果你键入iastrstr()将匹配既sofiamaria,这两者都是用户名查找错误的结果。使用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();
} 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章