2012-04-19 74 views
0

我有这样的代码工作(这是一个有点剥离下来):sprintf到c中的char指针列表?分割错误

char *parmList[6]; 

parmList[0] ="/root/ssl_send"; 
parmList[1] ="-m 1";    
...etc... 
parmList[5] = NULL; 
execvp(parmList[0], parmList); 

现在我想要写的东西,将一个字符串在此列表的sprintf(它更正确的说,我要那一个* parmList [6]的指针指向用sprintf构造的char数组)。我总是收到“分段错误”。 我曾尝试:

  • 使用malloc,
  • 宣布双阵列所以内存空间保留,
  • 使用的snprintf,...

我明明做错事。问题是similliar到Sprintf Segmentation Fault,只是我需要有一个execvp的指针/ char_arrays列表。

+4

为什么不**告诉我们你试过的而不是告诉的是什么? – littleadv 2012-04-19 07:36:01

+2

您很可能试图通过指针修改字符串文字,导致未定义的行为和崩溃。 – 2012-04-19 07:37:03

+1

字符串文字通常是只读的,它是UB来尝试写入它们。如果你想修改这些,那么你需要为它们分配内存并复制字符串文字数据。 – 2012-04-19 07:37:31

回答

1

这是使用sprintf创建字符串并在参数列表中使用该字符串的代码。确保为sprintf输出分配足够的空间。

char *parmList[6]; 
parmList[0] = "/bin/ls"; 
char arg1[10]; 
sprintf(arg1, "%s", "-l"); 
parmList[1] = arg1; 
parmList[2] = NULL; 
execvp(parmList[0], parmList); 
+0

你说得对,我第一次没有仔细阅读这个问题。示例代码已更新。 – 2012-04-19 08:10:46