- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
#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()
用于此目的。它搜索另一个字符串内的子字符串,但不比较字符串。例如,如果您输入 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/
题目地址:https://leetcode.com/problems/implement-strstr/description/ 题目描述 Implement strStr(). Return
这里是 C 的初学者。 我知道 strstr() 可用于查找字符串是否包含某个子字符串并且 printf() 可以显示彩色输出(如此处解释:stdlib and colored output in C
我有一个二进制数据文件,其中散布着各种字符串。我正在尝试编写 C 代码来查找文件中第一次出现的用户指定字符串。 (我知道这可以用 bash 完成,但出于其他原因我需要一个 C 代码。)目前的代码是:
我制作了 strstr() 函数,但程序没有给出任何输出,只是一个空白屏幕。请查看代码。 #include #include const char* mystrstr(const char *
你能找出这段代码中的错误吗,即使我传递了有效的参数来查找,它也无法打印歌曲 #include #include char tracks[][80] = { "I left my heart
我正在尝试匹配整个字符串,而不仅仅是其中的一部分。例如,如果 needle 是 2,我只想匹配 string 2 而不是 20、02 或 22 或任何相关内容。 我正在使用 strstr 作为: #i
在 OpenGL superbible 4th ed 中,第 70 页上的示例读取 //returns space-delimited names of all extensions supporte
你能找出这段代码中的错误吗,即使我传递了有效的参数来查找,它也无法打印歌曲 #include #include char tracks[][80] = { "I left my heart
这里的目标是将整个文本文件转储到缓冲区中,然后使用 strcasestr() 函数查找我在缓冲区中查找的单词的指针。它不断地给我段错误错误。起初,我认为可能是尺寸问题,所以我尝试使用较小的尺寸,但也不
我试图通过 strstr() 函数检查子字符串(“DATA”)是否(以及在哪里)位于大字符串(位于缓冲区 - LinearBuffer 中),但它似乎不起作用,并且我不知道为什么即使我的源字符串(位于
这是我到目前为止编写的代码,但我想用 int myStrStr 而不是 char myStrStr 但是当我用 int 代替时的 char ,它给了我一个错误。请帮忙。 int my_strlen(c
如果进程名称是“System”,则不进行 DbgPrint。如果是任何其他进程,现在 DbgPrint 都可以,但由于某种原因,它没有像预期的那样工作。 我尝试过:if( strstr( ImageN
我正在尝试使用 strstr 使用子字符串搜索任何匹配项并将其与文本行进行比较,但到目前为止尚未成功获得匹配项。我正在使用 popen 打开并读取文件,同时尝试仅使用 ipv4 地址进行搜索以查找匹配
我现在编写的程序遇到了一些问题。 strstr 仅当子字符串位于字符串末尾时才输出 此后它还会输出一些垃圾字符 我在使用“const char *haystack”然后向其中添加输入时遇到了问题,因此
我正在从头开始学习 C,我尝试制作一个小程序,在二维数组中搜索用户输入。 但是我的代码没有按预期工作并且总是返回 false。 我的代码: #include #include char songs[]
我正在从头开始学习 C,我尝试制作一个小程序,在二维数组中搜索用户输入。 但是我的代码没有按预期工作并且总是返回 false。 我的代码: #include #include char songs[]
由于 strstr 函数,我在该方法内有一个无限循环。是因为我将结构类型与字符类型相匹配吗? car* find(char* type){ car* stringCurr = list_hea
我的目标是在名为 myStrStr 的 C 函数中重新创建 strstr,如果在 haystack 中找到子字符串并且返回 1,则返回 1 0 如果不是,则将匹配的子字符串复制到缓冲区中。 我尝试编写
所以我尝试制作自己的 strstr 函数,并实现以下功能: char *mystrstr(char *haystack, char *needle); // find the first oc
我正在阅读 String searching algorithm维基百科文章,它让我想知道什么算法 strstr在 Visual Studio 中使用?我应该尝试使用其他实现方式,还是 strstr
我是一名优秀的程序员,十分优秀!