c - 循环内的 strcat() 与 sprintf()

标签 c performance loops printf strcat

我有一个程序可以删除字符串中的所有变量。这些变量以“$”开头。因此,举例来说,如果我给出一个像 [1,2,$1,$2] 这样的字符串,它应该只返回 [1,2]。

但是,哪个循环对性能更好?

这个:

while (token != NULL)
{
    if (*token != '$')
    {
        sprintf(dst, "%s,%s", dst, token);
    }
    token = strtok(NULL, "], ");
}

或者这个:

while (token != NULL)
{
    if (*token != '$')
    {
        strcat(dst, token);
        strcat(dst, ",");
    }
    token = strtok(NULL, "], ");
}

最佳答案

根据 C11 standard 7.21.6.6 p2 , 描述 sprintf:

If copying takes place between objects that overlap, the behavior is undefined.

所以您的第一个代码片段在从 dst 复制到 dst 时调用未定义的行为。 strcat 方法没有这个问题。

关于c - 循环内的 strcat() 与 sprintf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50416150/

相关文章:

java - 页面读取 - 内存或编码问题?

Django 通用外键 - 考虑到 SQL 性能是好是坏?

javascript - 一组间隔后生成数字

c# - 线程池 - 可能的线程执行顺序问题

c - 为什么这个 C 程序打印输出 "10"而不管 for 循环?

c - 奇怪的编译速度优化结果——IAR编译器

python - 对较小尺寸的数组进行广播操作

c - 在 C 中打印缩进

c++ - 调用 system() 返回 256

javascript - 查找 JSON 数组对 Angular 中的特定键具有特定值