我正在使用strcmp比较c ++中的字符数组,但是每次出现strcmp都会出现以下错误:错误:从'int'到'const char *'的无效转换后跟:error:初始化参数2 'int strcmp(const char *,const char *)'
我已经包含了string,string.h和stdio.h,这是我的代码,感谢所有回复的人。
另外,除了一堆if语句之外,还有更好的方法来检查缓冲区吗?
int main(int argc, char* argv[])
{
unsigned count = 0;
bool terminate = false;
char buffer[128];
do {
// Print prompt and get input
count++;
print_prompt(count);
cin.getline(buffer, 128);
// check if input was greater than 128, then check for built-in commands
// and finally execute command
if (cin.fail()) {
cerr << "Error: Commands must be no more than 128 characters!" << endl;
}
else if ( strcmp(buffer, 'hist') == 0 ) {
print_Hist();
}
else if ( strcmp(buffer, 'curPid') == 0 ) {
// get curPid
}
else if ( strncmp(buffer, 'cd ', 3) == 0 ) {
// change directory
}
else if ( strcmp(buffer, 'quit') == 0 ) {
terminate = true;
}
else {
//run external command
}
} while(!terminate);
return 0;
}
答案 0 :(得分:8)
您的比较字符串不正确。它们的格式应为"hist"
,而不是'hist'
。
在C ++中,'hist'
只是一个字符文字(如C ++ 0x草案(n2914)标准的 2.14.3 部分所述),我强调最后一段:
字符文字是用单引号括起来的一个或多个字符,如'x',可选地以字母u,U或L之一开头,如u'y',U'z'或L 'x',分别为。
不以u,U或L开头的字符文字是普通字符文字,也称为窄字符文字。
包含单个c-char的普通字符文字的类型为char,其值等于执行字符集中c-char编码的数值。
包含多个c-char的普通字符文字是多字符文字。多字符文字具有int类型和实现定义的值。
至于有更好的方法,这取决于你的意思更好: - )
一种可能性是建立一个功能表,它基本上是一个结构数组,每个结构包含一个单词和一个函数指针。
然后,您只需从字符串中提取单词并在该数组中进行查找,如果找到匹配项,则调用该函数。以下C程序显示了如何使用函数表。至于那是否是一个更好的解决方案,我会把它留给你(这是一种适度的先进技术) - 你可能最好坚持你理解的东西。
#include <stdio.h>
typedef struct { // This type has the word and function pointer
char *word; // to call for that word. Major limitation is
void (*fn)(void); // that all functions must have the same
} tCmd; // signature.
// These are the utility functions and the function table itself.
void hello (void) { printf ("Hi there\n"); }
void goodbye (void) { printf ("Bye for now\n"); }
tCmd cmd[] = {{"hello",&hello},{"goodbye",&goodbye}};
// Demo program, showing how it's done.
int main (int argc, char *argv[]) {
int i, j;
// Process each argument.
for (i = 1; i < argc; i++) {
//Check against each word in function table.
for (j = 0; j < sizeof(cmd)/sizeof(*cmd); j++) {
// If found, execute function and break from inner loop.
if (strcmp (argv[i],cmd[j].word) == 0) {
(cmd[j].fn)();
break;
}
}
// Check to make sure we broke out of loop, otherwise not a avlid word.
if (j == sizeof(cmd)/sizeof(*cmd)) {
printf ("Bad word: '%s'\n", argv[i]);
}
}
return 0;
}
运行时:
pax> ./qq.exe hello goodbye hello hello goodbye hello bork
你得到了输出:
Hi there
Bye for now
Hi there
Hi there
Bye for now
Hi there
Bad word: 'bork'