pro*c 에서 db에서 select해온 문자열의 뒤 공백은 어떻게 없애

sun1226의 이미지

DB 테이블에 유해프로그램이 예를들어 starcraft.exe이 있다고 할때,
원격에서 유해프로그램이 3번이상 실행시켰을때 agent한테 kill메세지를
보내는 과정에서 처음에 agent가 agent프로그램을 실행할때
서버에서는 db에 저장되어있는 starcraft라는 목록을 보내주는데..
문제가 있습니다....문제는...
배열 char str[30];배열에 select해서 starcraft를 넣고 소켓으로 보내주는데
strlen(str)해서 찍어보니까 29가 나오더라구요...실제는 9인데..
NULL이 아닌 공백이 들어가는것 같더라구요..그래서 agent에서 비교가 안되서 고생을 하고 있습니다...
select 할때 trim()를 사용해도 여전히 29가 나오더라구요...
..해결책이 없는지.

gold_ya의 이미지

:shock: 데이타를 입력할때 char str[] 대신에 varchar str[]로 해서 db에 값을 저장하시면 됩니다. char배열로 선언할경우 데이타 이외에 값은 공백 즉, 스페이스 값이 채워집니다. varchar로 하시면 값을 가변적으로 받을수 있기 때문에 원하는 데이타 값만을 받아서 저장하시면 문제가 해결될꺼 같습니다.

sun1226의 이미지

일단 코드함 보세요...

void get_app(void)
{
    EXEC SQL BEGIN DECLARE SECTION;
    varchar app_name[80];
    unsigned int cnt;

    int i;

    EXEC SQL END DECLARE SECTION;

    EXEC SQL DECLARE sel_app CURSOR FOR
        SELECT app_name,num FROM bad_app;
    EXEC SQL OPEN sel_app;

    EXEC SQL WHENEVER NOT FOUND DO break;
    init_bad_app();

    for(;;){
        EXEC SQL FETCH sel_app INTO :app_name,:cnt;
        bad_app_insert(app_name,cnt);
        printf("app_name=%s, cnt=%d\n",app_name,cnt);

    }

    EXEC SQL CLOSE sel_app;

    EXEC SQL COMMIT WORK;

}

varchar app_name한 부분이 에러가 나옵니다...맞지않는구문이라고..
bad_app_insert는 linked list를 만드는 함수입니다.

gold_ya의 이미지

음..
제가 봐서는 varchar가 컴파일 된후에 어떻게 변하는지에 대해서 보심이 좋을듯 합니다.

예를 들어 vachar str[10]; 이걸 컴파일하면은
str.arr[]
str.len이렇게 구조체 형식으로 바뀌게 됩니다..
varchar가 가변적이라는걸 생각하시면 이해가 가실듯합니다.

nangchang의 이미지

음.. 일단 VARCHAR 라고 대문자로 써주셔야 하구요..;;;

쿼리시에 널캐릭터를 넣어 주지 않기 때문에

app_name.arr[app_name.len] = '\0';

를 해주셔야 할껍니다.

최종호의 이미지

Pro*C 코드에서는 그냥

char hostvar[30 + 1];

식으로 쓰심 되고 proc 로 프리컴파일할 때

proc CHAR_MAP=STRING iname=progname

으로 해 주심 뒷쪽에 들어가는 빈칸들을 없애줍니다.

기본 CHAR_MAP은 8i, 9i 에서는 CHARZ 입니다.

Pro*C/C++ 매뉴얼의 3장인가에 각 CHAR_MAP 에 대한 설명이 나와있습니다. 참조하세요.

alifegg의 이미지

app_name은 초기화가 해주시고요..

memset(app_name, 0, sizeof(varchar));

select 할때 sql 함수를 써서

SELECT trim(app_name) app_name, num FROM bad_app;

정도 해주시면 될듯도 합니다... ^^
(예전 기억으로 써서 혹 틀리면 고쳐주시고요 ^^)

.::.

...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.