2012-04-19 10 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ので、このリストにある1つの文字列に何かを書きたい(それは私が1つをしたいと言う方が正しいのです* parmList [6]のポインタは、sprintfで構築されたchar配列を指します)。私はいつも "セグメンテーションエラー"を取得しています。 は、私が試してみました:メモリ空間が確保されるように、mallocを使用して

  • はダブル配列を宣言、
  • のsnprintfを使用して、...

私は明らかに間違って何かをやっています。問題はsimbreiarからSprintf Segmentation Faultになりました。ちょうどexecvpのためのポインタ/ char_arraysのリストが必要です。

+4

私はあなたに何を伝えようとしたのですか? – littleadv

+2

ほとんどの場合、ポインタを介して文字列リテラルを変更して、未定義のビヘイビアとクラッシュを引き起こしている可能性があります。 –

+1

文字列リテラルは通常は読み取り専用で、UBで文字列を書き込んで書き込むことができます。これらを変更したい場合は、それらのためにメモリを割り当てて文字列リテラルデータをコピーする必要があります。 –

答えて

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

あなたが正しいです、私は初めて慎重に質問を読んでいませんでした。サンプルコードが更新されました。 –

関連する問題