我有一个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中实施。
答案 0 :(得分:3)
您可以使用sprintf
或snprintf
个功能以及%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)并在退出前释放内存。因为c没有垃圾收集器,因为java有。