Superkkt Blog

/* ', " 문자가 있으면 앞에 \를 추가하는 함수
* 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() 함수가 위 기능을 수행한다. 이 함수의 존재를 몰라서 위 코드를 만들었는데.. 더 좋은 함수가 있으니 위 코드는 별 쓸모가 없겠다.
2006/03/26 22:40 2006/03/26 22:40

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

  1. 비밀방문자 2006/04/10 08:20
    M/D R
    관리자만 볼 수 있는 댓글입니다.
  2. anonymous 2006/04/10 08:20
    M/D R
    int main(int argc, char **argv) {
    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);
    }
    • 김기태 2006/04/10 18:27
      M/D
      'in' parameter of 'enclose_quot' function is a constant variable. so it can't be changed. I think your code works as you want.

Leave a Comment