2011-03-08 42 views
0

例如,我有这样的代码。在C++中将字符串连接到char数组中(通过使用较少的strcat)

​​

基本上,我想称之为” ./analyzeText跳回到bar.txt foo.txt的8" 在Linux上我的节目。 analyzeText是已编制的程序,位于同一文件夹中。

我想知道有比使用“strcat”在C++中创建字符串更短的方法吗?

+1

如果你只是想调用另一个程序,这看起来像一个shell脚本的工作。有什么理由不能使用脚本,或者想使用C? – dappawit 2011-03-08 20:37:34

+0

@dappawit:你在那里做了一些非常全面的假设。 OP想要从应用程序内执行系统命令的原因可能有多种。 – 2011-03-08 20:42:43

+0

是的,你是对的。当我第一次看到它时,我读它就好像他*只想*调用另一个程序。我不认为它可能在一个更大的程序本身。我的错。 – dappawit 2011-03-08 20:44:57

回答

3

使用一些字符串:

std::string NameTmp = "foo.txt"; 
std::string Name = "bar.txt"; 
std::string cmd = "./analyzeText " + Name + " " + NameTemp + " 8"; 
system(cmd.c_str()); 

这是稍微低效率(创建多个字符串),但它的很多简单。

+0

如果它正常工作,效率更高,而且您不必提出有关它的问题。:-) – 2011-03-08 20:42:31

3
std::string cmd("./analyzeText "); 
cmd += Name; 
// etc. 
system(cmd.c_str()); 

+=到右参数可以是C字符串(const char * /文字),一个或std::string单个字符。

(请永远不要使用strcat在C++中,这是不必要的和不安全的)

+0

请问为什么strcat不安全? – js0823 2011-03-09 02:49:28

+2

@ js0823:'strcat'会愉快地写在尾部的'\ 0'或超过缓冲区的末尾,所以如果你没有精确地计算出最后一个字节的最终字符串的大小,它会引发未定义的行为。如果需要,'std :: string'上的'+ ='将为你做内存分配。 – 2011-03-09 10:57:32

+0

非常感谢您的信息! – js0823 2011-03-09 14:22:42

3

是,使用C++构建:

std::string nameTmp = "foo.txt"; 
std::string name = "bar.txt"; 
int param = 8; 

... 

std::stringstream ss; 
ss << "./analyzeText " << name << " " << nameTmp << " " << param; 
system(ss.str().c_str()); 

我假设的名称和参数是在运行时变量。很明显,如果他们不是,那么你可以酌情替代。

相关问题