【问题标题】:Using strcmp to compare a char pointer and a literal使用 strcmp 比较 char 指针和文字
【发布时间】:2013-06-27 18:11:34
【问题描述】:

我已经尝试了大约一个小时,并在网上查看了其他地方,但仍然无法完成我想做的事情。这可能应该很简单,但我已经有一段时间没有用 C 编码了,所以我可能会遗漏一些东西。无论如何,我想使用 strcmp 来比较一个名为 char *args 的变量和像“qw”这样的文字。

我在 main 中并传递了一个函数这个 args 变量,当我得到它时,我想像这样进行比较:也许我只是完全以愚蠢的方式这样做。

char *args;
char **svdArray;

int keepTrack = 0;
int beforeTrack = 0;

svdArray = malloc(5*sizeof(char*));
while (1)
{           

if(!(strcmp(args[0], "r")) && (!strcmp(args[0], "rr")))
  {

    svdArray[keepTrack] = args[0];


     keepTrack++;
  }

我想要发生的只是如果我 args[0] 除了 rr 或 r 之外还有其他内容,我想执行 if 语句中的代码。但是到目前为止,流程从未进入过它,我不知道为什么。

任何帮助将不胜感激!!!

【问题讨论】:

  • 您的示例程序甚至在语法上都不正确 - 请出示您的实际代码。
  • args[] 无法编译。
  • strcmp在字符串相等时返回0(false),所以可以使用该函数对不同的字符串进行排序
  • C 中的逻辑or-运算符是||
  • args[0] 是一个char,根据定义不能等于rr

标签: c pointers char strcmp


【解决方案1】:

strcmp() 比较两个字符串的整体。

仅测试零件使用strstr(),例如:

if (strstr(args, "r")) || strstr(args, "rr")))
{
  svdArray[keepTrack] = args;
  keepTrack++;
}

【讨论】:

  • args 不是 char* 吗?所以args[0] would be a char`?
  • 好的,谢谢。我不知何故着迷于传递给main()args,它们确实是char ** args
【解决方案2】:

您需要将char* 传递给strcmp,例如args

这是来自herestrcmp 的原型:

int strcmp ( const char * str1, const char * str2 );

因此,既然argschar* 并且"r" 会给你一个char*,你应该试试:

/* since you're learning, print out what this thing does */
#include <stdio.h>
printf("Output: %d\n",strcmp(args,"r"));

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多