如何将char * argv []从Main函数指向表

时间:2016-10-31 18:24:36

标签: c++ console-application main

我会尝试解释我想做什么。我已经得到了程序(它不起作用),它是从Windows中的CMD控制台调用的。我使用的是主函数

中的参数
int main(int argc, char *argv[])

但在这种情况下,我无法使用调试器来查找我做错的事情...... 我能以某种方式将char * argv []参数连接到代码中创建的表吗? 例如:

int main(int argc, char *argv[])
{
char tablica[] = { 'K','2','+','1','-','3','*','(','3','+','2',')','*','2' };
tablica = **argv; //// IDK HOW TO CONNECT THESE TWO 

3 个答案:

答案 0 :(得分:6)

这里是你如何伪造参数传递并用你的数组替换

#include <stdio.h>

int main(int argc, char* argv[]){
     char *tablica[] = { argv[0],"K","2","+","1","-","3","*","(","3","+","2",")","*","2" };
     int i;
     argv=tablica;
     argc=sizeof(tablica)/sizeof(tablica[0]);

     for (i=0;i<argc;i++)
     {
         printf("%s\n",argv[i]);
     }
     return 0;
}

结果:

your_executable
K
2
+
1
-
3
*
(
3
+
2
)
*
2

注意:为了符合argc,argv:

  • 我已将字符数组更改为char *数组(单引号=&gt;双引号)。这似乎是合乎逻辑的,因为没有它你就无法传递例如数字&gt;你的论点中有9个!
  • 我也覆盖了argc(从数组中自动计算)
  • 我已在您的数组中插入程序名称,否则它将转换参数解析。

答案 1 :(得分:2)

将代码分成可测试的函数可以做得更好。这将允许您编写一个单元测试项目,以查看它是否在已知输入上正确运行(如您已准备好的),或者直接从main调用argc,argv。

// your code 
int your_code (int argc, char* argv[]);

// can be called from main
int main(int argc, char* argv[]){
    your_code(argc, argv);
    return 0;
}

// or can be tested
void unit_test() {
    char * tablica[] = ...;
    int arg_count = sizeof(tablica) / sizeof(tablica[0]);
    your_code(arg_count, tablica);
}

答案 2 :(得分:0)

请注意,您的代码目前假定每个字符都是新元素。这可以防止大于9的数字。如果您承诺,string非常简单地为您执行此操作。

const auto tablica = string(argv + 1, argc - 1) + "K2+1-3*(3+2)*2"s

或者如果您希望将命令行参数作为后缀:

const auto tablica = "K2+1-3*(3+2)*2"s + string(argv + 1, argc - 1)

如果您需要将其转储到单独的列表中,您可以执行以下操作:

copy(cbegin(tablica), cend(tablica), ostream_iterator<char>(cout, "\n"))