spawnv调用char数组数组(char * argv [])

时间:2010-09-23 17:08:31

标签: c++

id喜欢产生一个参数数量未知的进程。 到目前为止我的代码(使用power ++):

char** psaParameters = new char*[ saParameters.GetCount() ];

            for( int i = 0; i < saParameters.GetCount(); i++ )
            {
                psaParameters[ i ] = new char[ saParameters[ i ].GetLength() ];
                strcpy( psaParameters[ i ], saParameters[ i ].GetText() );
            }

            spawnv( P_WAIT, psaParameters[ 0 ], psaParameters );

但它崩溃了。为什么呢?

谢谢你! -dominik

4 个答案:

答案 0 :(得分:1)

saParameters[i]是什么类型的?

您可能需要将此行更改为:

psaParameters[ i ] = new char[ saParameters[ i ].GetLength() + 1 ];

包括零终结符。

答案 1 :(得分:0)

saParameters的类型是什么?我的猜测,不知道是GetLength()返回不包括NUL终结符的字符数。由于strcpy会自动添加此项,因此会导致saParameters数组中的每个缓冲区溢出。

答案 2 :(得分:0)

您没有为终止空字符分配足够的空间。

 psaParameters[ i ] = new char[ saParameters[ i ].GetLength() ];

应该是

 psaParameters[ i ] = new char[ saParameters[ i ].GetLength() + 1 ];

答案 3 :(得分:0)

好的,我们发现了问题所在:

  1. GetLength()+ 1是正确的 - 谢谢;)
  2. psaParameters中的最后一个数组元素(指针)必须为NULL,因此spawnv() - 方法知道何时停止从参数数组中读取参数。