2016-08-02 2 views
1

문자열 식별자를 다른 문자열 식별자 안에 포함 할 수 있습니까? 전체를 인쇄 할 수 있습니까? 예 :다른 문자열 내의 문자열 식별자

int main() 
{ 
    char *str1 = "%s says:"; 
    char *name = "John"; 
    printf("%s\n", str1, name); 
    return(0); 
} 

예상 출력은 John says:입니다. 어떻게 이런 식으로 printf 나 sprintf를 할 수 있을까요?

+4

시도해 보셨습니까? 'printf (str1, name);'더 의미가 없습니까? –

+0

...'printf ("% s \ n", str1, name);은 하나의 형식 지정자를 가지고 있지만 두 개의 인수를가집니다. 두 번째는 무시됩니다. –

+0

"문자열 식별자"란 무엇입니까? – Olaf

답변

1

printf()가하는 작업에 대해 생각해보십시오.

printf()는 "% s"을보고 표시된 문자열을 인쇄합니다. 표시된 문자열에는 "% s"문자가 포함됩니다. printf()는 그것을 어떻게 알 수 있습니까? 자동으로 다시 검색하거나 다시 검색하지 않습니다.

루프가 어때? 문자를 수집하고 sprintf()를 버퍼에 집어 넣습니다. 매번 문자열에 다른 '%'가 있으면 sprintf()를 다시 적용하십시오. 다 끝났 으면 puts()를 사용하여 문자열을 문자 그대로 덤프하십시오.

+0

글쎄, 그것은 매우 잘 재귀 적으로 문자열을 해석 할 수 있습니다. 이유는'printf'가 작동하지 않기 때문에 가능하지 않기 때문에 보안상의 이유로 (사용자가 입력 한 문자열이 인쇄되면 어떻게 될까?) 이것이 항상 잘 알려진 형식 문자열) 및 복잡성. 이 함수는 이미 표준 라이브러리에서 가장 큰 라이브러리 중 하나이다 ('scanf' 계열과 함께). – Olaf

2

아니요, printf은 그렇게 작동하지 않을 수 있습니다. 당신은 두 개의 별도의 단계에서이 작업을 수행해야합니다 :이에 변화를 내가 즉시 형식 문자열을 구축하는 데 필요한 시간의 숫자를해야 할 일을했을 것

const char *fmt = "%s says: "; 
char result1[SIZE];    // where SIZE is large enough to hold the result 
sprintf(result, fmt, "John"); // result now contains "John says: " 
printf("%s\n", result);  // writes "John says: " to standard output 

. 그 정도면 쉽습니다.

+0

* 형식 문자열 *'fmt'를 포함하는 변수를 호출 할 때 재미있는 방법은 ... –

관련 문제