n 변수를 사용한 문자열 보간은 일반적으로 가변 함수를 포함합니다. C에서 va_list 대신 동적으로 생성 된 문자열 배열을 취할 수있는 vsprintf
과 비슷한 대안이 있습니까?vsprintf와 유사하게 va_list 대신 동적으로 생성 된 문자열 배열을 사용하도록 구현되었습니다.
int foo (char *s, const char *format, char **strs);
n 변수를 사용한 문자열 보간은 일반적으로 가변 함수를 포함합니다. C에서 va_list 대신 동적으로 생성 된 문자열 배열을 취할 수있는 vsprintf
과 비슷한 대안이 있습니까?vsprintf와 유사하게 va_list 대신 동적으로 생성 된 문자열 배열을 사용하도록 구현되었습니다.
int foo (char *s, const char *format, char **strs);
아니요, C 표준 라이브러리에는 이러한 기능이 없습니다.
형식 문자열이 매우 제한되어 있으므로 (%s
및 너비 수정 자만 지원) 형식 문자열을 구문 분석하여 직접 구현할 수 있습니다.
이 없습니다,하지만 당신은 자신의 기능, 예컨대 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern char *strdup(const char *);
int foo(char *str, const char *fmt, char **arr)
{
int cnt = 0, len = 0, bit = 0;
char *buf, *ptr, *tmp;
/* fmt must be writable */
buf = ptr = strdup(fmt);
if (buf == NULL) {
perror("strdup");
exit(EXIT_FAILURE);
}
while ((tmp = ptr)) {
while ((ptr = strchr(ptr, '%'))) {
/* Support for %% */
if (ptr[1] == '%') {
ptr += 2;
continue;
}
/* Skip first % */
if (bit ^= 1) {
ptr += 1;
continue;
} else break;
}
if (ptr) *ptr = '\0'; /* Tokenize */
len += sprintf(str + len, tmp, arr[cnt++]);
if (ptr) *ptr = '%'; /* Untokenize */
}
free(buf);
return len;
}
int main(void)
{
char *arr[] = {"one", "two", "three"};
char str[100];
foo(str, "%s, %s, %s", arr);
printf("%s\n", str);
return 0;
}
을 쓸 수 있습니다