如何在另一个字符串的中间添加字符串变量?

时间:2016-06-16 08:41:43

标签: c string

我有一个c程序如下:

char* data1 = "test";//Here i have given some dummy value, the value will be evaluated in runtime
char* variable1 = "<Method name=\"data1\">";

我在使用此代码时遇到的问题是data1的{​​{1}}变量名,而不是data1的{​​{1}}变量名。所以我想在变量 variable1 的地方知道(如第2行所示),如何在执行期间获得 test 这是它的值。

data1的预期结果:variable1

我期望<Method name="test">的实际结果:variable1

在java中我使用&#34; +&#34;运营商,我正在努力在C中实施。

2 个答案:

答案 0 :(得分:3)

您可以使用sprintfsnprintf个功能以及%s占位符,如下所示:

#include <stdio.h>

int main (void)
{
    char* data1 = "test";//Here i have given some dummy value, the value will be evaluated in runtime
    char* variable1 = "<Method name=\"%s\">";

    char result[500];

    sprintf(result, variable1, data1);

    snprintf(result, 500, variable1, data1);

    return 0;
}

答案 1 :(得分:2)

如果你在谈论变量声明,你可以使用字符串连接宏。

#include <stdio.h>

#define STRCAT(a, b, c) a b c

#define STR1 "test"

char* data1 = STR1;
char* variable1 = STRCAT("<Method name=\"", STR1, "\">" );

int main(void)
{
    printf("%s\n", variable1);
}

如果您要构建运行时,可以使用,如已建议snprintf

#include <stdio.h>
#include <string.h>

int main(void)
{
    char* data1 = "test";
    char* variable1 = "<Method name=\"%s\">";
    char output[strlen(data1)+strlen(variable1)-1];

    snprintf(output, sizeof(output), variable1, data1 );

    printf("%s\n", output);
}

如您所见,输出数组的结果大小计算如下:

  • strlen(data1) = 4
  • strlen(variable1) = 18

由于格式2,我们必须从variable1长度删除"%s"个字符,并为{null}终止符添加1 byte因为strlen计算长度为#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char* data1 = "test"; char* variable1 = "<Method name=\"%s\">"; size_t output_size = strlen(data1)+strlen(variable1)-1; char *output = malloc(output_size); if (output != NULL) { snprintf(output, output_size, variable1, data1 ); printf("%s\n", output); } else { fprintf(stderr, "malloc error"); } free(output); } C-string但不包括终止空字符。

由于编译器无法支持@alk VLA指针,所以,最后一个示例可以使用malloc

UITabBarItem

正如您所看到的,内存是动态分配的,您必须检查所需的字节数是否已成功分配(指针!= NULL)并在退出前释放内存。因为没有垃圾收集器,因为java有。