문자열 배열을 정의할 때 일반적으로 다음과 유사하게 선언합니다.
char *arr[5] =
{
"example0",
"example1",
"example2",
"example3",
"example4"
};
문제가 있는 곳은 의 요소 중 하나에 변수를 전달하는 방법을 모른다는 것입니다 arr
.
예를 들어,
char str[6] = "1.0.0.1";
char *arr[6] =
{
"example0",
"example1",
"example2",
"example3 %s", str,
"example4"
};
물론, 이것은 작동하지 않습니다. 단지 제가 문제를 겪고 있는 것에 대한 기본적인 예시일 뿐입니다.
나는 또한 나중에 사용할 수 있다는 것을 알고 strncat()
있지만 snprintf()
메모리를 처리하는 고통을 피하기 위해 선언 시 배열의 문자열 중 하나로 변수를 구문 분석할 수 있는지 알고 싶습니다.
... 선언 시 배열의 문자열 중 하나로 변수를 구문 분석하는 것이 가능한 경우.
컴파일 타임에 아래와 같이 연결할 수 있습니다.
#define STR "1.0.0.1"
char str[] = STR;
char *arr[6] = {
"example0",
"example1",
"example2",
"example3" " " STR, // Forms "example3 1.0.0.1"
"example4"
};
아마도 OP는 런타임 중에 형성된 것에 관심이 있을 것입니다. 가변 길이 배열(VLA) 을 사용 합니다.
void foobar(const char *str) {
int n = snprintf(NULL, 0, "example3 %s", str);
char a[n]; // VLA.
snprintf(a, sizeof a, "example3 %s", str);
char *arr[6] = {
"example0",
"example1",
"example2",
a,
"example4"
};
printf("<%s>\n", arr[3]);
}
int main(void) {
foobar("1.0.0.1");
}
산출
<example3 1.0.0.>
또는 문자열 을 위한 공간 은 할당을 통해 수행될 수 있습니다.
char *a = malloc(n + 1u);
sprintf(a, "example3 %s", str);
....
free(a);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다