【问题标题】:cmd arguments into char** in c在 c 中将 cmd 参数转换为 char**
【发布时间】:2014-03-20 04:09:19
【问题描述】:


我正在尝试执行以下操作:
给定一个带有 cmd 参数的程序,我试图将 argv 中的某些字符串存储到 char** 中,但我是 C 新手,我真的不确定如何做到这一点并不断遇到分段错误.我该怎么做?


示例:
程序运行执行“Program arg2 arg3 arg5”行
现在我想将arg2arg5 保存到一个新的字符串数组中,让我们调用它 StringFromArgs 和它的 char**,
我还可以看出argv[1]argv[3] 是我需要的, 假设我知道StringsFromArgs 的最大容量是 3。

我该怎么写:

StringsFromArgs[0]=argv[1]
StringsFromArgs[1]=argv[2]
StringFromArgs[2]=NULL

编辑 示例代码

int main(int argc, char** argv){
char** stringsFromArgs;
stringsFromArgs = malloc( 3 * sizeof(char*) ) ;
int i;int k=0;
for(i=1; i<argc; i++){
   if(argv[i]= somecondition){
      stringsFromArgs[k] = argv[i];
      k++;
   }
}
//do something
return 0;
}

**编辑: 最后用你的答案解决了,谢谢!

【问题讨论】:

  • 你为 StringsFromArgs 分配空间了吗?
  • 我有,由于某种原因它仍然无法工作......
  • 很可能,您没有正确分配 StringsFromArgs。给我们malloc代码,我们就能指出错误。
  • 看不到任何错误,除了“if(argv[i]= somecondition)”应该是“if(argv[i] == somecondition)”
  • 另外,由于 "argv[i]" 是一个字符串,你不能只做一个 " == " 比较,只有当你知道你在做什么的时候。我会说,你必须做一个“strcmp”。

标签: c string command-line-arguments


【解决方案1】:

最简单的方法是::

int main( int argc, char** argv )
{
 char** StringsFromArgs ;

 StringsFromArgs = malloc( 3 * sizeof(char*) ) ;
 if( StringsFromArgs == NULL ) 
 {
  return -1 ; // ERROR allocating memory
 }

 StringsFromArgs[0]=argv[1] ;
 StringsFromArgs[1]=argv[3] ;
 StringFromArgs[2]=NULL ;

 free( StringsFromArgs ) ;
 return 0 ;
}

【讨论】:

  • 为什么free命令来了??如果意图表明最后你必须释放内存,它会让用户感到困惑
  • 当然,目的是展示 malloc 的用法,最后,您必须释放内存。
  • 问题是我事先不知道我想要哪个 argv[i]。我在循环中找到它们
  • @Tai 你可以通过argc循环它。
  • 我正在这样做,但由于某种原因它无法与 StringsFromArgs[0]=argv[i] 一起使用...
【解决方案2】:

最简单的方法是:

int main( int argc, char** argv )

    char* StringsFromArgs[] = {argv[1], argv[2], NULL}

    //some work here

    exit(0);

}

根本找不到使用malloc() 的理由。

【讨论】:

  • 当然。我宁愿说,没有必要将 argv 存储在其他一些变量中,除非您打算修改它们,而我在 OP 问题中没有看到。
【解决方案3】:

你也可以试试

#include <assert.h>  // assert()
#include <stdlib.h>  // malloc() and free()

int main(int argc, char *argv[]) 
{
    int i = 0,k = 0;

    if (argc > 1)
    {
        char **StringsFromArgs = malloc((argc - 1) * sizeof(char *));

        for(i=0;i<argc-1;i++)
        {
              if(strcmp(argv[i+1],"somestring")==0)
              {
                 StringsFromArgs[k] = argv[i+1];
                 printf("Argument%d:%s\n",i+1,StringsFromArgs[k]);
                 k++;
              }
        }
    }

   free( StringsFromArgs ) ;
   return 0;
}

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2017-05-14
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多