【问题标题】:sprintf to a list of char pointers in c? Segmentations errorssprintf 到 c 中的 char 指针列表?分段错误
【发布时间】:2012-04-19 07:34:11
【问题描述】:

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

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,....

我显然做错了什么。问题与Sprintf Segmentation Fault 类似,只是我需要一个用于 execvp 的指针/char_arrays 列表。

【问题讨论】:

  • 您为什么不向我们展示您的尝试而不是告诉我们?
  • 您很可能正试图通过导致未定义行为和崩溃的指针修改字符串文字。
  • 字符串文字通常是只读的,尝试写入它们是 UB。如果要修改这些,则需要为它们分配内存并复制字符串文字数据。

标签: c string segmentation-fault printf arrays


【解决方案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);

【讨论】:

  • 你说得对,我第一次没有仔细阅读这个问题。示例代码已更新。
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2013-09-18
  • 2016-02-24
相关资源
最近更新 更多