代码之家  ›  专栏  ›  技术社区  ›  Austin

如何在C中通过argv[1]进行索引?

  •  -3
  • Austin  · 技术社区  · 8 年前

    如果我有:

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        int length = strlen(argv[1]);
    

    argv[1]一个只是一个单词,例如,“hello”,我该如何向后索引并逐个字母打印出来?

    我尝试过使用strrev,但显然这不是在linux中,我宁愿在argv[1]中向后循环,也不想包含这个函数。

    我试过:

    int i;  
    for (i = length; i == 0; i--){
    
        printf("%c", argv[1][i]);
    }
    

    但我在执行之前就知道这是错误的。

    3 回复  |  直到 8 年前
        1
  •  4
  •   artm    8 年前

    我怎么能把它倒过来索引,然后逐个字母打印出来

    int i;  
    for (i = strlen( argv[1] ) - 1 ; i >= 0; i--){
        printf("%c", argv[1][i]);
    }
    

    当然,你也需要 #include <string.h> 用于字符串相关函数,如 strlen .

        2
  •  1
  •   Sanjay Charran    8 年前

    功能 strlen 将返回数组/字符串中的字符数,但是,最后一个元素将不是返回的值,而是 length = strlen(argv[1]) - 1

    我也相信你 for 循环的意思是:

    for (i = length; i >= 0; i--){ //Note the change of i==0 to i >= 0
    
        3
  •  1
  •   user4822941 user4822941    8 年前

    虽然接受的答案是可以的,但不应该这样。

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        int length = strlen(argv[1]);
    

    这在3个帐户上是不正确的:

    1. 首先不检查是否存在argv[1],最好是 通过确保argc==2修复
    2. 使用strlen,但使用string。h不包括在内。您确定要在启用警告的情况下进行编译吗?
    3. 有一点风格,但仍然很重要的一点是,如果您要多次使用argv(而且是),那么字符串应该存储在某个地方。通常,在解析参数的初始阶段之后,您不希望依赖argv或argc