代码之家  ›  专栏  ›  技术社区  ›  AJ.

在没有指针算法的情况下,在C(不是C++)中向字符串追加格式化字符串?

  •  3
  • AJ.  · 技术社区  · 16 年前

    编写了一个非常简单的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);
    }
    

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

    -aj

    5 回复  |  直到 16 年前
        1
  •  11
  •   ephemient    16 年前

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

    int len = 0;
    len += sprintf(us+len, ...);
    len += sprintf(us+len, ...);
    ...
    
        2
  •  3
  •   Jerry Coffin    16 年前

    嗯…你就不能用这样的东西吗

    sprintf(us, "You: %s\nMe: %s\nWe are %s and %s!\n, you, me, me, you);
    
        3
  •  2
  •   Hans Passant    16 年前
    char *me="Foo";
    char *you="Bar";
    char us[100];
    
    char* out = us;
    out += sprintf(out,"You: %s\n",you);
    out += sprintf(out,"Me: %s\n",me);
    out += sprintf(out,"We are %s and %s!\n",me,you);
    printf("%s", us);
    
        4
  •  1
  •   kgiannakakis    16 年前

    您可能正在寻找 strcat (或者更好 strncat ).

        5
  •  1
  •   dreamlax    16 年前

    切勿将非常量字符串用作 printf (或第二个论点) fprintf me 可变到 "Muahaha %n%d%n%d%n%d%n%d%n" 向你的堆栈说再见,向 SEGFAULT printf printf 不知道你没有给它任何论据。

    fputs(str,stdout) printf