【问题标题】:C user dynamic input with argv使用 argv 的 C 用户动态输入
【发布时间】:2022-01-21 13:13:09
【问题描述】:

所以我尝试从命令行获取未知最大长度的用户输入。能够执行此类操作的程序需要获取字符串的动态输入(也许是char数组?)。结果应该是这样的

./a.out st1 你的 str 是...

我能想到的唯一代码如下

int main (int argc, char* argv[]){
    ...
    char str1[];
    str1 = argv[1];
    printf("your...);
    ...
}

【问题讨论】:

  • 有趣的是,Corfu这个词是什么意思?
  • 请说明您对应用程序的使用示例和期望的结果。
  • 如果你执行a.out your string is the beaches of Corfu那么你想要输出:your string is the beaches of Corfu,对吗?
  • 弗拉德我不知道它与 q 有什么关系,但它是我学习的希腊岛屿
  • Beta 是的,但没有空格

标签: c command-line-arguments c-strings


【解决方案1】:

具有空元素数的块范围数组的声明:

char str1[];

不正确。而且数组没有赋值运算符:

str1 = argv[1];

你可以声明一个指针:

char *str1;
str1 = argv[1];
printf("your...);

【讨论】:

    【解决方案2】:

    C 将用空指针终止argv,而argv is modifiable,因此实际上很容易实现shift,就像在bash scripts 中一样。您的基础可能如下所示。

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        char *arg;
        if(!argc || !argv[0]) return 0; /* Defensive */
        while(arg = *(++argv))
            printf("do something with %s\n", arg);
        return 0;
    }
    

    【讨论】:

    • 或者你可以写一个可读的循环而不是晦涩的指针算法:for(int i=0; i&lt;argc; i++) { char* arg = argv[i]; if(arg == NULL) { ... } }
    • 真;不仅仅是风格,如果你想要参数出现的索引,你建议的方式很好。
    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    相关资源
    最近更新 更多