Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sprintf到c中的字符指针列表?分割错误_C_String_Segmentation Fault_Printf_Arrays - Fatal编程技术网

sprintf到c中的字符指针列表?分割错误

sprintf到c中的字符指针列表?分割错误,c,string,segmentation-fault,printf,arrays,C,String,Segmentation Fault,Printf,Arrays,我有一个有效的代码(有点精简): 现在我想用sprintf为列表中的一个字符串写一些东西(更正确的说法是,*parmList[6]的一个指针指向用sprintf构造的字符数组)。我总是遇到“分割错误”。 我试过: 使用malloc 声明双数组以保留内存空间 使用snprintf 我显然做错了什么。问题与之类似,只是我需要一个execvp的指针/字符数组列表。下面是使用sprintf创建字符串并在参数列表中使用该字符串的代码。确保为sprintf输出分配足够的空间 char *parmList

我有一个有效的代码(有点精简):

现在我想用sprintf为列表中的一个字符串写一些东西(更正确的说法是,*parmList[6]的一个指针指向用sprintf构造的字符数组)。我总是遇到“分割错误”。 我试过:

  • 使用malloc
  • 声明双数组以保留内存空间
  • 使用snprintf

我显然做错了什么。问题与之类似,只是我需要一个execvp的指针/字符数组列表。

下面是使用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);

为什么不向我们展示您尝试过的内容,而不是告诉我们呢?很可能您正试图通过指针修改字符串文字,从而导致未定义的行为和崩溃。字符串文字通常是只读的,您可以尝试并写入它们。如果你想修改它们,那么你需要为它们分配内存并复制字符串文字数据。你说得对,我第一次没有仔细阅读这个问题。示例代码已更新。
char *parmList[6];
parmList[0] = "/bin/ls";
char arg1[10];
sprintf(arg1, "%s", "-l");
parmList[1] = arg1;
parmList[2] = NULL;
execvp(parmList[0], parmList);