【问题标题】:Comparing C strings vs. string pointers for equality比较 C 字符串与字符串指针是否相等
【发布时间】:2016-08-10 20:42:39
【问题描述】:

所以我正在做一个项目来创建和使用外壳。必须做的一件事是“|executable| -p |prompt| 应该允许用户选择用户定义的提示。否则,默认应该是“257sh>”。无论如何,我编写了我的代码来执行此操作它不断进入 else 语句。经过一些实验后,我知道我的 argv[1] == "-p" 行是导致问题的原因,因为没有它,代码可以工作。问题是当我打印出 argv [1] 时,它会打印“- p"(假设这是我输入的内容)。这是我的 shell 函数。

    void shellLoop(char *n)
{
    char *line;
    char **args;
    int status;
    char name = n;

    do{
        printf("%s>", n);
        line = sysReadLine();
        args = splitLine(line);
        status = execute(args);

        free(line);
        free(args);
    }while(status);
}

这是我的主要功能

int main(int argc, char *argv[])
{
    if(argc == 3 && argv[1] == "-p"){
        shellLoop(argv[2]);
    }
    else{
        shellLoop("257sh");
    }

    return EXIT_SUCCESS;
}

【问题讨论】:

  • argv[1] == "-p" :在 C 中使用 strcmp 而不是 ==

标签: c shell input command-line-arguments


【解决方案1】:

您还可以使用 strncmp(char *str1,char *str2,int n) 比较两个字符串的前 n 个字节。

【讨论】:

  • "Also" 暗示显示的方法实际有效 - 但它没有。由于两个字符串都保证为nul-终止,因此strncpy 不是必需的。
【解决方案2】:

当您执行argv[1] == "-p" 时,您比较两个指针,以及两个永远不会相同的指针。

要比较 C 中的字符串,请使用 strcmp 函数:strcmp(argv[1], "-p") == 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2014-11-09
    • 2010-12-20
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多