sprintf到c中的字符指针列表?分割错误
我有一个有效的代码(有点精简): 现在我想用sprintf为列表中的一个字符串写一些东西(更正确的说法是,*parmList[6]的一个指针指向用sprintf构造的字符数组)。我总是遇到“分割错误”。 我试过: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
- 使用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);