[질문] 이게 어떻게 가능하죠?

zaru의 이미지

#include <stdio.h>
#include <string.h>

int main(void)
{
    char query[2048];
    char *tmp = "Adding string.";

    strcpy(query, "INSERT INTO list (");
    strcat(query, "ID, No ");
    sprintf(query + strlen(query), "'%s')", tmp);

    printf("query=[%s]\n", query);
    return 0;
}

실행결과 :

Quote:

query=[INSERT INTO list (ID, No Adding string.')]

위에서 코드 중

sprintf(query + strlen(query), "'%s')", tmp);

strlen()은 스트링의 길이를 반환하는 것 아닌가요?
어떻게 query에 strcat() 처럼 붙죠?
첨 보는 것이구 신기해서.. 누가 명쾌한 설명좀 부탁드립니다.

감사합니다.

[/code]

은빛연어의 이미지

sprintf(query + strlen(query), "'%s')", tmp); 

배열의 주소를 넣은 것이지요..
즉 포인터를 이용한 것입니다. ^^*

espereto의 이미지

    sprintf(query + strlen(query), "'%s')", tmp); 

query 가 가르키는 지점에서 query가 가진 문자열의 길이만큼 더하면, query가 가진 문자열의 마지막 포인트의 다음 포인트를 가르키게 됩니다. (query 가 가르키는 주소에서 문자열 길이만큼 더해진 주소지요)

다르게 표현하면, &query[strlen(query)] 로도 표현할 수 있겠죠.