gpt4 book ai didi

c - strstr == NULL 不起作用,

转载 作者:行者123 更新时间:2023-11-30 20:39:20 25 4
gpt4 key购买 nike

#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 的方式也可以,ty。

最佳答案

一个问题是您无法使用 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();
}

关于c - strstr == NULL 不起作用,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com