mysql c api에서 select field1... strlen(field1) 문제...
글쓴이: yangsg / 작성시간: 일, 2005/03/06 - 3:25오전
mysql c api를 이용해 플그램을 짜고 있습니다..
디비에 field1의 값이 NULL입니다..
query = select field1 from ... result = mysql_store_result row = mysql_fetch_row( result )
이럴경우 strlen(row[0]) 이렇게 할경우 return이 0이 될것을 기대했습니다..
그런데... segmentation fault가 발생합니다..
field1의 default 값이 빈공간일경우 0을 return하더군요..
흠... row[0] 이 변수가 NULL 인지 체크를 하고 strlen 함수를 사용해야 하는건가요 .. ??
Forums:
자답입니다..
그냥... row[0]이 NULL인지 검사하는 패턴을 넣었습니다..
row[0]?strlen(row[0]):0
그런데.. NULL일 경우 왜 0을 return 하지 않는지 의문이 남습니다...
strlen(NULL);이 Segmentation fault를 낼까요
strlen(NULL);
이 Segmentation fault를 낼까요? 안낼까요?
mysql api와는 별로 상관이 없을 듯한데요...
strlen(NULL)은 segmentation fault 내던데요..
strlen(NULL)은 segmentation fault 내던데요.. ;;
char a='\0'
strlen(a)은 0을 return 하더군요.. ;;
흠... 무식이 죄라고.. 무슨 차이가 있나요.. ??
[quote="shrrot"]strlen(NULL)은 segmentati
제 gcc에서는 둘다 segmentation fault를 내뱉네요.
[kihongss@w-102 test]$ gcc --version
2.96
char a='\0'; <-- 요거일경우는strlen(&
char a='\0'; <-- 요거일경우는
strlen(&a) 해야 되는데 오타가 있네요..
version이 상관이 있나요 ??
글 흐름이 조금 이상하게 간 듯 싶은데... ;;NULL과 '' (e
글 흐름이 조금 이상하게 간 듯 싶은데... ;;
NULL과 '' (empty string)은 전혀 다른 존재입니다.
http://dev.mysql.com/doc/mysql/en/mysql-fetch-row.html
NULL 필드에 대해서 포인터를 확인하라고 되어있습니다. DB 필드값이 NULL이면 포인터가 NULL이고, 빈 문자열이면 포인터가 "" (== '\0')을 가리키는 것이지요.
NULL 필드에 대한 strlen(row[0]) == strlen(NULL) 이라서 segfault가 발생하게 되는 것이고, 매뉴얼의 예제쪽에는 mysql_fetch_lengths()를 사용하여 필드의 길이를 가져오는군요. (MYSQL_ROW 구조체가 필드값의 길이를 가지고 있기 때문에, 따로 strlen을 실행할 필요는 없다고 합니다)
아하.. [b]progcom[/b]님 답변 감사드립니다..딱 원하는
아하.. progcom님 답변 감사드립니다..
딱 원하는 답변입니다..
reference를 펼쳐놓고 있으면서도 읽어 보지를 못했네요..
NULL, empty string에 대해서도 답변 감사드립니다..
무식이 글 읽고 아~ 도 트이는 소리가 ^^;
다시한번 감사드립니다..
댓글 달기