/* ', " 문자가 있으면 앞에 \를 추가하는 함수
* in : 원본 문자열
* out : 결과 출력될 버퍼
* len : out의 length
*/
int
enclose_quot(const char *in, char *out, size_t len)
{
int i, e;
size_t in_len;
in_len = strlen(in);
if(in_len > len)
return -1;
for(i = 0, e = 0; i < in_len && e < len - 1; i++) {
/* ' 또는 " 이면 앞에 \을 추가한다 */
if(in[i] == 0x22 || in[i] == 0x27) {
out[e++] = 0x5c;
out[e++] = in[i];
}
else {
out[e++] = in[i];
}
}
out[e] = '\0';
if(e == len - 1)
return -1;
return 0;
}
* in : 원본 문자열
* out : 결과 출력될 버퍼
* len : out의 length
*/
int
enclose_quot(const char *in, char *out, size_t len)
{
int i, e;
size_t in_len;
in_len = strlen(in);
if(in_len > len)
return -1;
for(i = 0, e = 0; i < in_len && e < len - 1; i++) {
/* ' 또는 " 이면 앞에 \을 추가한다 */
if(in[i] == 0x22 || in[i] == 0x27) {
out[e++] = 0x5c;
out[e++] = in[i];
}
else {
out[e++] = in[i];
}
}
out[e] = '\0';
if(e == len - 1)
return -1;
return 0;
}
참고로 mysql_real_escape_string() 함수가 위 기능을 수행한다. 이 함수의 존재를 몰라서 위 코드를 만들었는데.. 더 좋은 함수가 있으니 위 코드는 별 쓸모가 없겠다.

comments
comments rss (+댓글 쓰러가기)char inp[2];
char out[2];
memset(inp, 0, sizeof(inp));
memset(out, 0, sizeof(inp));
memset(inp, 0x27, sizeof(inp)-1);
printf("inp: %s\nout: %s\n", inp, out);
enclose_quot(inp, out, sizeof(out));
printf("inp: %s\nout: %s\n", inp, out);
/* inp[0] becomes 0x00 !!! */
return(0);
}