pro*c 에서 db에서 select해온 문자열의 뒤 공백은 어떻게 없애
글쓴이: sun1226 / 작성시간: 월, 2003/05/26 - 11:05오후
DB 테이블에 유해프로그램이 예를들어 starcraft.exe이 있다고 할때,
원격에서 유해프로그램이 3번이상 실행시켰을때 agent한테 kill메세지를
보내는 과정에서 처음에 agent가 agent프로그램을 실행할때
서버에서는 db에 저장되어있는 starcraft라는 목록을 보내주는데..
문제가 있습니다....문제는...
배열 char str[30];배열에 select해서 starcraft를 넣고 소켓으로 보내주는데
strlen(str)해서 찍어보니까 29가 나오더라구요...실제는 9인데..
NULL이 아닌 공백이 들어가는것 같더라구요..그래서 agent에서 비교가 안되서 고생을 하고 있습니다...
select 할때 trim()를 사용해도 여전히 29가 나오더라구요...
..해결책이 없는지.
Forums:
varchar
:shock: 데이타를 입력할때 char str[] 대신에 varchar str[]로 해서 db에 값을 저장하시면 됩니다. char배열로 선언할경우 데이타 이외에 값은 공백 즉, 스페이스 값이 채워집니다. varchar로 하시면 값을 가변적으로 받을수 있기 때문에 원하는 데이타 값만을 받아서 저장하시면 문제가 해결될꺼 같습니다.
답변 정말 감사합니다...
일단 코드함 보세요...
varchar app_name한 부분이 에러가 나옵니다...맞지않는구문이라고..
bad_app_insert는 linked list를 만드는 함수입니다.
varchar ...
음..
제가 봐서는 varchar가 컴파일 된후에 어떻게 변하는지에 대해서 보심이 좋을듯 합니다.
예를 들어 vachar str[10]; 이걸 컴파일하면은
str.arr[]
str.len이렇게 구조체 형식으로 바뀌게 됩니다..
varchar가 가변적이라는걸 생각하시면 이해가 가실듯합니다.
Re: 답변 정말 감사합니다...
음.. 일단 VARCHAR 라고 대문자로 써주셔야 하구요..;;;
쿼리시에 널캐릭터를 넣어 주지 않기 때문에
를 해주셔야 할껍니다.
CHAR_MAP 옵션을 써보세요.
Pro*C 코드에서는 그냥
char hostvar[30 + 1];
식으로 쓰심 되고 proc 로 프리컴파일할 때
proc CHAR_MAP=STRING iname=progname
으로 해 주심 뒷쪽에 들어가는 빈칸들을 없애줍니다.
기본 CHAR_MAP은 8i, 9i 에서는 CHARZ 입니다.
Pro*C/C++ 매뉴얼의 3장인가에 각 CHAR_MAP 에 대한 설명이 나와있습니다. 참조하세요.
sql 함수 rtrim 이나 trim을 사용하심은...
app_name은 초기화가 해주시고요..
memset(app_name, 0, sizeof(varchar));
select 할때 sql 함수를 써서
SELECT trim(app_name) app_name, num FROM bad_app;
정도 해주시면 될듯도 합니다... ^^
(예전 기억으로 써서 혹 틀리면 고쳐주시고요 ^^)
.::.
...
댓글 달기