【问题标题】:how to increment argv如何增加 argv
【发布时间】:2014-04-05 18:57:38
【问题描述】:
int main(int argc,char *argv[])
{
    int f1,flag,n;
    if(argc<3)
    {
        printf("Correct format: ./a.out <fileName> <string>\n");
        exit(-1);
    }
    f1=creat(argv[1],0666);
    if(f1<0)
    {
        printf("Creatioon error\n");
        exit(f1);
    }
    n=strlen(argv[2]);
    printf("%d\n",n);
    while(n-->0)
    flag=write(f1,argv[2]++,1);
    if(flag<0)
    {
        printf("Write error\n");
        exit(flag);
    }
    close(f1);
    return 0;
}

flag=write(f1,argv[2]++,1);这里为什么要argv[2]++,为什么要复制的文本长度是1??

【问题讨论】:

  • 问代码作者?

标签: c command-line-arguments argv


【解决方案1】:

增量是因为它在一个(愚蠢的)循环中:

while(n-->0)
  flag=write(f1,argv[2]++,1);

但你的代码没有缩进,所以有点难看。

argv[2] 是一个 char * 指向作为命令行中第三个单词输入的字符串,因此将其递增到字符串中的下一个字符。

这是错误的代码;应该是write(fl, argv[2], n); 一次写完。当然,仍然必须检查返回值,如果有部分写入,write() 可能会循环重试或恢复。

【讨论】:

  • 点赞for (size_t n, total = strlen(argv[2]); (n = write(f1, argv[2], total) &gt; 0; argv[2] += n, total -= n) {}(如果您想检查错误,请把total 拉出来)。
【解决方案2】:

长度为1,因为write的第三个参数是1。

你可能想要这个:

/* write second command line argument to the file */
flag=write(f1, argv[2], strlen(argv[2]);

【讨论】:

  • write 只需写入一个字节即可成功。
  • 确保它可能会成功,但一次写入整个字符串会更有效。
  • 关键是你的代码是不正确的,除非你把它放在一个循环中。
  • 因为如果写入的数组少于完整的数组,你就不会明白......好吧,我想这取决于你的意思是如何将你的代码集成到 OP 的代码中。
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2011-02-22
  • 2010-12-24
相关资源
最近更新 更多