我想連接字符串使用stdarg(庫)標題,但我做錯了什麼。 有一種更簡單的方法來使用realloc連接字符串?使用stdarg 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);
}
您正在重新分配內存,然後將其扔掉。你需要以某種方式從函數中返回新的指針。 – 2013-04-29 03:23:04
stdarg不是圖書館,它是clib的一部分,它的大部分如果不是全部只是宏 – stdcall 2013-04-29 04:55:12