0

我有一个简单的错误。该项目是创建一个基本菜单的骨架。新命令只是从 1 计数到用户输入的整数。在继续之前,我已经发布了一个指向包含我的 .cpp 文件的 pastebin 的链接:http:
//pastebin.com/pAi9EiEi

程序的其余部分运行并工作。但是,错误很简单。只要我输入任何命令,它就会崩溃。运行错误检查后,我发现错误不是 while 而是 if 语句。错误在与此类似的行上:

if (stricmp(strstr(newCommand, cmd2), newCommand) == 0)

这条线应该做的是复制 cmd2 中的内容并将其放入 newCommand 然后将其与不区分大写的敏感性进行比较:

char newCommand[] = "new";
4

2 回答 2

3

“这条线应该做的是复制 cmd2 中的内容并将其放入 newCommand 中,然后将其与没有大写敏感性的情况进行比较:”

如果代码这样做了,它会将以前的内容cmd2与自身进行比较,不是吗?

copy cmd2 -> newCommand
is cmd2 == newCommand?

如果用户键入“open”,那么在循环的第一次迭代中,它会将“open”复制到“newCommand”中,并且您将不再在程序中的任何位置使用字符串“new”。

strstr在第一个字符串中搜索第二个字符串的出现。

strstr("hello world", "world"); // returns pointer to 'world' in 'hello world'
strstr("biscuit", "new");  // returns NULL to indicate new doesn't occur in 'biscuit'

当然,您真正想要做的只是:

if (stricmp(newCommand, cmd2) == 0) {
    // match
}

顺便说一句,如果您确实想将“cmd2”复制到“newCommand”中,则可以使用strcpy(destinationStr, sourceStr);

strcpy(newCommand, cmd2);
于 2013-11-04T20:54:18.927 回答
2

那条线没有做你认为它做的事情

http://www.cplusplus.com/reference/cstring/strstr/

它在 newcommand 中搜索 cmd2 的出现并返回一个指向它的指针(如果没有找到则返回 null),除非我错误地在 stricmp 中传递了一个 null 是未定义的行为

你只想要一个简单的 stricmp 并且你取消了副本

于 2013-11-04T20:17:19.287 回答