在没有指针算术的情况下将格式化字符串附加到C(而不是C++)中的字符串?

AJ.*_*AJ. 3 c pointers

写了一个非常简单的C函数来说明我想要简化的内容:

void main(int argc, char *argv[]){
    char *me="Foo";
    char *you="Bar";
    char us[100];
    memset(us,100,0x00);

    sprintf(us,"You: %s\n",you);
    sprintf(us+strlen(us),"Me: %s\n",me);
    sprintf(us+strlen(us),"We are %s and %s!\n",me,you);
    printf(us);
}
Run Code Online (Sandbox Code Playgroud)

似乎应该有一个标准的库函数来处理我正在用sprintf做的事情并推进指针,不是吗?已经多年,因为我已经做了的C任何量...

谢谢,-aj

eph*_*ent 10

sprintf 返回写入的非NUL字符数.

int len = 0;
len += sprintf(us+len, ...);
len += sprintf(us+len, ...);
...
Run Code Online (Sandbox Code Playgroud)

  • 不.您的示例为每次迭代调用strlen(),这使得它在sprintf()调用的数量中为O(N ^ 2).这利用了printf系列函数返回打印的字符数以免费获得strlen结果的事实.事实上,这是这类事情的标准习语.和往常一样:确保您正在测试缓冲区长度并使用snprintf,如果这是处理不受信任数据的任何东西! (6认同)