2016-10-31 13 views
0

我会尽力解释我想要做什么。我已经有了这个程序(不起作用),它被编写成在Windows中从CMD控制台调用。我使用的是从主要功能如何将char * argv []从主函数指向表

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

连接是什么意思? CONCATENATE?而且,一般来说,你是否有机会尝试制作命令行计算器? –

+0

看起来OP正在尝试将命令行参数传递给main(),而不是将它们添加到Visual Studio中相应的Debugger选项卡中。 – drescherjm

回答

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的:

  • I已经将字符数组更改为数组char *(单引号=>双引号)。这似乎是合乎逻辑的,因为如果没有,你不能在你的论点中传递> 9的实例数!
  • 我也改写了argc(自动从你的数组中计算)
  • 我已经在你的数组中插入了程序名,否则它会移动参数解析。
+0

这正是我想要的!谢谢 – Mikkey

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")) 
2

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

// 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); 
} 
+0

这是正确的解决方案 –