0

这是我的问题:我有一个数组,其中包含一个命令 a[1],然后是几个命令 args a[2]、a[3]、...

我需要做的是以下

  • 创建一个字符串,由 cmd 和 args 的组合组成,例如:

命令 arg1 arg2 arg3

  • 执行该命令字符串

这是我的做法(伪代码):

  1. 预先计算每个 arg 的长度并将其存储在数组中
  2. 获取组合(使用 GNU 科学库)
  3. 计算分配字符串所需的字节大小(cmd 的长度 + 1 + arg1 的长度 + 1 + argn-1 + 1)(+1 通常用于空白,最后用于 \0)
  4. 使用 strcat 构建字符串
  5. 执行命令字符串

好吧,它有效,但我想知道是否故意使用 strcat 实际上是有效的/正确的方法。

有什么建议么?

4

4 回答 4

5

不,使用strcat()效率不高,因为每次调用它时它都必须遍历字符串以找到结尾。

snprintf()如果你有它(并且可以在其中压缩你的参数),或者使用直接指针操作自己做,那就更好了。

当然,为了在实践中发挥重要作用,您确实需要经常运行此命令。

于 2010-02-16T11:26:36.913 回答
2

如果您已经存储了每个组件字符串的长度,您可以切换到使用memcpy正确的指针偏移量而不是使用strcatwhich 不必找到字符串的末尾并针对每个源字符进行测试'\0',但除此之外要使串联的创建速度显着加快,您可以做更多的事情。

于 2010-02-16T11:25:17.773 回答
1

strcat(),以及标准库中的所有字符串操作函数,都​​是低效的。这是由于字符串在 C 中的存储方式,即以零结尾,因此每个函数都必须通过遍历每个字符来找到字符串的结尾。

无论如何,您正在进行过早的优化:与命令执行相比,此处的多个 strcat() 调用将执行得非常快,因此您不必担心连接方式的效率。

在优化部分代码之前,您必须证明它是一个瓶颈,并且优化确实会缩短执行时间。在大多数情况下,不需要优化:根本不值得花时间。

于 2010-02-16T11:32:48.903 回答
0

我会用sprintf来做。

于 2010-02-16T11:25:51.050 回答