我想知道这个小代码有什么问题,它没有提供预期的结果

I would like to know what's wrong with this tiny code that it doesn't provide the expected results

简而言之,这个程序的目的是循环遍历给定的字符串数组,并在将任何逗号 (,) 更改为冒号 (:) 后按原样打印出来。

int main(int argc, string argv[])
{
  int i;
  int j;
  int n;
  int x;
  int count = 0;

    for ( i = 1, n = argc -1; i <= n; i++)
  {
    for ( j = 0, x = strlen(argv[i]); j < x; j++)
    {

      if(strcmp(&argv[i][j], ",") == 0)
      {
        //count++;
        printf(":");
      }

      else {printf("%c", argv[i][j]);}
    }
  }
  printf("\n");
  //printf("Count = %i & i = %i & j= %i\n", count, i, j);
  //printf("x= %i\n",x);
}

这是我在 运行 代码后得到的结果:

$ ./conversion 12, 1,2 ,12
12:1,2,12

我期望得到的是这个:

$ ./conversion 12, 1,2 ,12
12:1:2:12

结论: 我相信由于某种原因,逗号在字符串的 beginning/middle 中无法识别 如果它位于文本的末尾,它就可以工作。希望您能告诉我如何获得预期的结果。

提前致谢!

表达式&argv[i][j]是从j-th字符开始的i-th字符串。当您将其与逗号字符串进行比较时,"," 仅当逗号位于字符串末尾时才会匹配。在您的示例中,逗号在 "12," 中找到,但在 "1,2"",12".

中找不到

打印字符时,使用不带& 的表达式argv[i][j],即i-th 字符串的j-th 字符。在检查逗号时也使用它:

if (argv[i][j] == ',') // comma found!

当然,您必须在此处检查单引号中的字符文字。 strcmp 对于比较 null-terminated 字符串很有用。单个字符可以用普通的比较运算符进行比较。