CGI 프로그래밍 (C)

익명 사용자의 이미지

저는 웹사이트를 운영한다거나 하지는 않지만, 프로그래밍 연습 삼아서
C언어로 CGI프로그래밍을 해보다 의문이 생긴 학생입니다.

문자열을 받아서 특정 문자들을 삭제하는 함수를 만든 부분이었는데,
내용이 다음과 같습니다.

char *rmCtrlChar( char *str )
{
char *src, *fp;

if( str )
{
for( src=str, fp=str; *src ;src++ )
if( (*src & 0x7f) >= 0x20 )
*fp++ = *src;
*fp = '\0';
}
return( str );
}

길이는 짧지만, 아직 제가 무슨 말인지 알 수 있는 내용은 아니더군요.
문자열을 대상으로 하는 함수이니, 비교 대상 각각은 1byte의 char형일 것
이라고,
생각해서 1부터 128까지 정수, 16진수, 문자로 출력해 봤지만 이해할만한
실마리를
얻을 수 없었습니다. 특히 이들을 출력하고 나면 터미널이 좀 비정상으로
되었습니다. (치지도 않은 명령어가 나오고...)

0x7f나 0x20에 해당하는 문자는 무엇인지 보이지도 않더군요. 도대체
0x7f는
무엇이고, 이것과 비트 곱 연산...?이면 어떤 비트를 세트하는 것? 그러
면 그렇게
해서 얻은 값이 0x20보다 크면 왜 위험한 문자가 되는 것인지?
특히 0x0e인가 0x0f는 출력하면 터미널의(한텀...) 문자가 완전히 망가져
서 알아볼
수가 없었습니다. 저렇게 짧은 내용에서도 무슨 일이 벌어지는지 알 수
없다니...

마찬가지로 16진수로 인코딩된 문자를 재생한다는 x2c()함수도 의문입니
다.

digit = (what[0] >= 'A') ? ((what[0] & 0xdf)-'A')+10 (what[0] -
'0');
digit *= 16;
digit += (what[1] >= 'A') ? ((what[1] & 0xdf)-'A')+10 (what[1] -
'0');

0xdf로 첫째 문자를 무엇으로 만들 수 있는 것이고, 거기에 -'A' + 10 이
라니?
또 'A'보다 큰 문자값이면 왜 '0'을 빼는가?( 이게 숫자 영역 같지는 않던
데...)
에 대한 의문점을 알 수 없었습니다.

아시는 분께서 답변을 주시면 감사하겠습니다.

익명 사용자의 이미지


문자들이 어떤것들이 있는지는 확실히 몰라도..

저함수는 어떤 문자열들 중에서.. 각문자의최초비트에 상관없이

0x20(공백) 문자보다큰것들만 놔두고 나머지는 지워버리는 함수입니다.

그러니까 아마도 문자가 아닌것들은 제외시키는 함수 같은데요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.