我正在尝试使用 stdarg (library)标头连接字符串,但我做错了。使用 realloc 连接字符串有更简单的方法吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
void concatenaCodigo(char *string, char *format, ...){
va_list args;
va_start(args, format);
int n = vsnprintf(NULL, 0, format, args);
string = (char*) realloc (string, n);
if (string != NULL) {
printf("Realloc OK!\n");
vsprintf(string, format, args);
va_end(args);
}
else {
free (string);
puts ("Error (re)allocating memory");
exit (1);
}
}
int main(){
char *codigoC = NULL;
concatenaCodigo(codigoC, "Test%s%s","asd","asd");
printf("%s\n", codigoC);
}
我做了改变。代码应该如下所示?串联还没有工作。
char* concatenaCodigo(char *format, ...){
va_list args;
va_start(args, format);
int n = vsnprintf(NULL, 0, format, args);
char * newString;
newString = (char*) malloc(n);
vsprintf(newString, format, args);
va_end(args);
return newString;
}
int main(){
char *codigoC = NULL;
codigoC = concatenaCodigo("Test%s%s", "asd", "asd");
printf("%s\n", codigoC);
}