可以在命令行参数中传递的最大字符串长度?

时间:2013-08-31 06:08:39

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

我已经看到了这个问题similar ques for SQL

我将网页内容作为c ++程序的参数传递。

我的代码在这里:

<?php
//sent has value "http://www.paulgraham.com/herd.html"
$url=$_POST['sent'];
$text = file_get_contents($url);
$temp=strip_tags($text);
$output=shell_exec("/home/technoworld/Videos/LinSocket/Modular/x '$temp'");
echo $output;
?> 

仅为小内容提供输出。我得到的输出是

most : 1 in : 1 investors : 1 component : 1 2013The : 1 biggest : 1 August : 1 Dynamics : 1 Herd : 1 Investor : 1 Maximum Occurrences Investor Herd Dynamics August 2013The biggest component in most investors 

实际上它显示了每个单词的计数。

在命令行中执行程序时手动:

./x "string"

它可以为“http://www.paulgraham.com/herd.html”的第一段提供正确的结果 。但是它没有在论证中传递第二个和下一个para内容。它只是在命令行上写它。

我怎样才能在论证中传递这样的内容?对于小内容,它可以提供正确的输出。

getconf ARG_MAX

我的系统允许的参数列表是:2097152

2 个答案:

答案 0 :(得分:1)

您可以修改C ​​++和PHP源并构建管道。

C ++

int main () {
    std::ostringstream txt;
    txt << std::cin.rdbuf();
    std::cout << "Input: \n" << txt.str() << std::endl;
    return 0;
}

PHP

<?php
$pipe = popen('Debug/Test', 'w'); 
if( ! $pipe) {
    // Error
} 
else { 
    $txt = 'Hello World'; 
    fwrite($pipe, $txt, strlen($txt)); 
    pclose($pipe);
}
?>

答案 1 :(得分:1)

我已将PHP程序更改为使用escapeshellarg,如下所示。我没有测试它,但我的猜测是它会起作用

<?php
//sent has value "http://www.paulgraham.com/herd.html"
$url=$_POST['sent'];
$text = file_get_contents($url);
$temp=escapeshellarg(strip_tags($text));
$output=shell_exec("/home/technoworld/Videos/LinSocket/Modular/x " . $temp);
echo $output;
?>