【问题标题】:meaning of this code :for(i=0;argv[1][i]!='\0';i++) [closed]这段代码的含义:for(i=0;argv[1][i]!='\0';i++) [关闭]
【发布时间】:2017-01-12 16:11:54
【问题描述】:

我从名为“Learn C the hard way”的书中找到了这段代码,但我无法理解它的含义和目的:

for(i=0;argv[1][i]!='\0';i++){
    char letter=argv[1][i];

【问题讨论】:

  • 通读整本书,你就会明白。
  • 这段代码不完整,没有意义
  • 你到底有什么不明白的地方?循环结构?数组下标?循环内的声明?
  • 我不明白这段代码是如何工作的,因为我只是初学者

标签: c string command-line argv


【解决方案1】:

对于传递给程序的参数中的每个字母,它都会使用该值创建一个名为 letter 的变量。
我认为它用于for循环的以下行中。

【讨论】:

    【解决方案2】:

    argv[1] 是字符串数组argv 中的第二个字符串,而字符串是字符数组,所以argv[1][0]第二个字符串中的第一个字符argv[1][1]第二个字符串中的第二个字符等等。

    【讨论】:

    • 注意argv[1]是第一个参数,argv[0]是程序名
    【解决方案3】:

    根据 C 标准,带有参数的 main 声明如下

    int main( int argc, char * argv[] )
    

    相当于

    int main( int argc, char ** argv )
    

    argv 指向指向字符串第一个字符的指针数组的第一个元素。

    因此argv[1] 是指向第二个参数的第一个字符的指针(第一个参数是程序名称)。例如*argv[1]argv[1][0] 是一个以零结尾的字符串的第一个字符。

    例如,如果你的程序是这样运行的

    your_program Hello
    

    然后将命令行参数传递给程序,如字符串"Hello"。还有这个循环

    for(i=0;argv[1][i]!='\0';i++){
        char letter=argv[1][i];
    

    遍历字符串直到遇到终止零。

    您可以通过以下方式逐字符输出所有参数

    #include <stdio.h>
    
    int main( int argc, char * argv[] ) 
    {
        for ( int i = 0; i < argc; i++ )
        {
            for ( int j = 0; argv[i][j] != '\0'; j++ ) putchar( argv[i][j] );
            printf( "\n" );
        }
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2019-06-25
      • 2016-10-16
      相关资源
      最近更新 更多