我知道这可能是一个全新的问题(我很长一段时间没有接触过C),但有人可以告诉我为什么这不起作用吗?
printf("Enter command: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
if (strcmp(buffer, "exit") == 0)
return 0;
Run Code Online (Sandbox Code Playgroud)
如果我输入"exit"它不会输入if,它是否与"buffer"的长度有关?
有什么建议?
由于我完全不同意的原因,但是"尽管我的反对意见仍在继续判决的权力(反可用性)",我有一个排序例程,它将基本的strcmp()与其名称排序进行比较.它很棒; 很难弄错那个人.但是,在第11个小时,已经确定以数字开头的条目应该在以字母开头的条目之后出现,与ASCII顺序相反.他们引用EBCDIC标准的数字跟随字母,所以先前的假设不是普遍的事实,我没有权力赢得这个论点......但我离题了.
这就是我的问题所在.我用新函数调用nonstd_strcmp替换了对strcmp的所有适当引用,现在需要实现修改以完成排序更改.我使用FreeBSD源作为我的基础:http://freebsd.active-venture.com/FreeBSD-srctree/newsrc/libkern/strncmp.c.html
if (n == 0)
return (0);
do {
if (*s1 != *s2++)
return (*(const unsigned char *)s1 -
*(const unsigned char *)(s2 - 1));
if (*s1++ == 0)
break;
} while (--n != 0);
return (0);
Run Code Online (Sandbox Code Playgroud)
我想我可能需要花一些时间来真正思考它应该如何完成,但我确信我不是唯一一个经历过刚刚释放规范变化的大脑死亡的人.
我正在写一个strcmp bash内置.编译很好,但是当我尝试启用它时,我得到:
$ enable -f ./strcmp strcmp
bash: enable: cannot open shared object ./strcmp: ./strcmp: only ET_DYN and ET_EXEC can be loaded
Run Code Online (Sandbox Code Playgroud)
我内置的重要部分:
strcmp_builtin (list)
WORD_LIST *list;
char *strcmp_doc[] = {
(char *)NULL
};
struct builtin strcmp_struct = {
"strcmp", /* builtin name */
strcmp_builtin, /* function implementing the builtin */
BUILTIN_ENABLED, /* initial flags for builtin */
strcmp_doc, /* array of long documentation strings. */
"strcmp 'string 1' 'string 2'", /* usage synopsis; becomes short_doc */
0 /* reserved …Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以在较大的字符串中找到较小的字符串数组?我有两个列表,一个有独特元素,另一个有重复元素.我想在较大的数组中找到较小数组的特定模式的全部出现.我知道strcmp会比较两个单元格数组,但前提是它们的长度相等.我的第一个想法是使用循环遍历较大阵列的子集,但必须有一个更好的解决方案.
例如,在以下内容中:
smallcellarray={'string1',...
'string2',...
'string3'};
largecellarray={'string1',...
'string2',...
'string3',...
'string1',...
'string2',...
'string1',...
'string2',...
'string3'};
index=myfunction(largecellarray,smallcellarray)
Run Code Online (Sandbox Code Playgroud)
会回来的
index=[1 1 1 0 0 1 1 1]
Run Code Online (Sandbox Code Playgroud) 为什么这段代码不起作用.只是试图检查用户输入是否与密码相同
char *pass;
printf("Write the password: ");
scanf("%s", pass); // Because is a pointer the & is out ?
if( strcmp( pass , "acopio") == 0)
Run Code Online (Sandbox Code Playgroud) 通常strcmp使用两个参数[例如strcmp(str1,"garden")],如果两者都相同则返回0.
是否可以比较输入的一部分,比如输入的前五个字符?(例如strcmp(str1,"garde",5))
#include <stdio.h>
#include<string.h>
int main(void) {
char str1[] = "garden";
if (strcmp(str1, "garden") == 0)
{
printf("1");
}
if (strcmp(str1, "garden", 6) == 0)
{
printf("2");
}
if (strcmp(str1, "garde", 5) == 0)
{
printf("3");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 为问题的基本性质提前道歉.
我试图使用该strcmp函数来测试两个匹配字符的字符串.
我将问题简化为以下简单代码:
#include <iostream>
#include <cstring>
using namespace std;
void compareStrings(string, string);
int main()
{
string string1 = "testString", string2 = "testString";
compareStrings(string1, string2);
return 0;
}
void compareStrings(string stringOne, string stringTwo)
{
if (strcmp(stringOne,stringTwo) == 0)
cout << "The strings match." << endl;
else
cout << "The strings don't match." << endl;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释以下编译器错误消息吗?
./newProgram.cpp: In function ‘void compareStrings(std::string, std::string)’:
./newProgram.cpp:17:32: error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个在main中接受参数的C代码; 因此当我在cmd中写一些字符串时,程序会在其中执行某些操作.但我做错了什么,我找不到它.
这是代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]){ //File name is main.c
if(argc != 3)
printf("Wrong!!!!!!!!!");
else
if (argv[1] == "-s")
girls(); //Prints "Girls"
else if(argv[1] == "-k")
boys(); //Prints "Boys"
else
printf("OMG!!");
}
Run Code Online (Sandbox Code Playgroud)
在cmd;
gcc -o gender main.c
gender -s pilkington
我输入那些命令.总是输出
"我的天啊!!"
哪部分错了?
所以我试图广泛地搜索这个解决方案,但只能找到其中一个字符串中缺少新行或空字节的帖子.我很确定这不是这种情况.
我使用以下函数将一个单词与一个文件进行比较,该文件包含每行一个单词的单词列表(函数中的字典).这是代码:
int isWord(char * word,char * dictionary){
FILE *fp;
fp = fopen(dictionary,"r");
if(fp == NULL){
printf("error: dictionary cannot be opened\n");
return 0;
}
if(strlen(word)>17){
printf("error: word cannot be >16 characters\n");
return 0;
}
char longWord[18];
strcpy(longWord,word);
strcat(longWord,"\n");
char readValue[50] = "a\n";
while (fgets(readValue,50,fp) != NULL && strcmp(readValue,longWord) != 0){
printf("r:%sw:%s%d\n",readValue,longWord,strcmp(longWord,readValue));//this line is in for debugging
}
if(strcmp(readValue,longWord) == 0){
return 1;
}
else{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
代码编译时没有错误,函数会很好地读取字典文件,并打印出现在那里的单词列表.我遇到的问题是,即使两个字符串相同,strcmp也不会返回0,因此函数将为任何输入返回false.
我得到:
r:zymoscope
w:zymoscope
-3
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我觉得我必须遗漏一些显而易见但却无法在搜索中找到任何内容的东西.
我想比较两个字符串 s1 和 s2 ,两个字符串之间可以有空字符。我想要区分大小写和不敏感的比较,如 strcmp 和 strcasecmp。假设我的字符串是:
std::string s1="Abcd\0abcd"
std::string s2="Abcd\0cccc"
Run Code Online (Sandbox Code Playgroud)
目前,我正在执行strcmp(s1.c_str(), s2.c_str())and strcasecmp(s1.c_str(), s2.c_str())butstrcasecmp并strcmp最终在这种情况下给出 equal 并跳过之后的比较\0。我可以使用任何库来比较这些字符串。