【问题标题】:Function not running after using strtok使用 strtok 后函数未运行
【发布时间】:2020-03-27 17:58:16
【问题描述】:

使用strtok() 后,我的程序出现了一些问题。我已经测试了printf 并且opt 总是得到它应该得到的东西。但是当我到达 if 子句时,什么都没有运行。例如,当我输入a banana 时,它应该运行函数a1,但程序刚刚结束。

#include <stdio.h>
#include <string.h>

char pedido[80],*opt

int main(){
    fgets(request,80,stdin);
    opt=strtok(request," ");
    if (opt=="a"){a1();}
    if (opt=="q"){a2();}
    if (opt=="N"){a3();}
    if (opt=="A"){a4();}
    if (opt=="r"){a5();}
    if (opt=="R"){a6();}
    if (opt=="C"){a7();}
    if (opt=="p"){a8();}
    if (opt=="E"){a9();}
    if (opt=="m"){a10();}
    if (opt=="l"){a11();}
    if (opt=="L"){a12();}
    return 0;
}

【问题讨论】:

  • 返回函数 a1() 是什么意思。它看起来不像 a1 对我来说是定义的。 a1 是做什么的?
  • @Hogan 它已定义,我只是没有将其包含在问题中,因为问题不在于函数本身
  • @user3121023 它不应该运行,因为香蕉有一个a,这是因为第一个字符是a。空格后面键入的内容将在函数中使用。

标签: c c-strings strtok


【解决方案1】:

这样的陈述

if (opt=="a"){a1();}

没有意义,因为 opt 永远不能等于“a”。 opt 的值为 NULL 或数组请求中字符的地址。由于字符串字面量和数组占用的内存范围不同,所以它们的地址不相等。

你应该使用标准的 C 函数 strcmp 作为例子

if ( strcmp( opt, "a" ) == 0 ){a1();}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2020-08-12
    • 1970-01-01
    • 2023-01-05
    相关资源
    最近更新 更多