strcat()用于格式化字符串

Bra*_*son 11 c string printf concatenation

我正在我的程序中逐个构建一个字符串,当我在末尾添加一个简单的字符串时,我正在混合使用strcat(),但是当我添加一个格式化的字符串时,我正在使用sprintf(),例如:

int one = 1;
sprintf(instruction + strlen(instruction), " number %d", one);
Run Code Online (Sandbox Code Playgroud)

是否可以使用strcat()连接格式化的字符串或者首选方法是什么?

Mat*_*son 15

您的解决方案将有效.调用strlen有点尴尬(特别是如果字符串变得很长).sprintf()将返回你使用的长度[strcat不会],所以你能做的一件事是这样的:

 char str[MAX_SIZE];
 char *target = str;

 target += sprintf(target, "%s", str_value);
 target += sprintf(target, "somestuff %d", number);
 if (something)
 {
    target += sprintf(target, "%s", str_value2);
 }
 else
 {
    target += sprintf(target, "%08x", num2);
 }
Run Code Online (Sandbox Code Playgroud)

我不确定strcat是否比sprintf()以这种方式使用时效率更高.

编辑:应该写更小的例子......


iab*_*der 9

不,这是不可能的,但你可以使用sprintf()这些简单的字符串,并避免strlen()每次调用:

len = 0;
len += sprintf(buf+len, "%s", str);    
len += sprintf(buf+len, " number %d", one);
Run Code Online (Sandbox Code Playgroud)