linux 환경에서 c언어로 나 이외에 접속자 구분하는 프로그램 만들었는대 strcmp 반환 값이 좀 이상 합니다.
/*
check값이 초기화할떄는 0이지만 그 이후부터는 10,17값을 유지함 이상하다.
*/
#include
#include
#include
#include
#include
void error_info(char *message)
{
printf("%s\n",message);
}
int main()
{
char command[]="who";
char buff[1024]={0,};
FILE *file=NULL;
int check=0;
char *ptr=NULL;
char tok[]=" ";
char chan[1024] ="mose";
/*
printf("check:%d 이 아이디 이외는 다 침입자:",check);
scanf("%s",&chan);
*/
file=popen(command,"r");
if(file==NULL)
error_info("file popen error");
while(fgets(buff,sizeof(buff),file)!=NULL)
{
printf("check:%d ",check);
ptr = strtok(buff,tok);
printf("ptr:%s ",ptr);
printf(" chan: %s %d",chan,check);
check=strcmp(ptr,"change");
printf("\n");
/*if(check != 0)
{
printf("---------------------------------\n");
printf("비정상:%s\n", ptr);
while(ptr != NULL)
{
printf("기록:%s\n",ptr);
ptr=strtok(buff,tok);
}
printf("---------------------------------\n");
}*/
}
if(check == 0)
printf("안전\n");
pclose(file);
return 0;
}
참고해보세요.
http://www.cplusplus.com/reference/cstring/strcmp/
return value indicates
<0 the first character that does not match has a lower value in ptr1 than in ptr2
<0일 경우. 첫번째 문자는 ptr2보다 ptr1이 더 작은값을 가지며. 일치하지 않는다.
0 the contents of both strings are equal
0 두 문자열의 내용은 동일하다
>0 the first character that does not match has a greater value in ptr1 than in ptr2
>0일 경우. 첫번째 문자는 ptr2보다 ptr1 이 더 큰값을 가지며. 일치하지 않는다.
아래코드는 윈도우XP 홈. DevC++에서 확인한 내용입니다.
http://codepad.org/
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
반환값에 대해선 아는대 제가 같은 문자열을 비교 했는대도 반환이 0이 아닌값으로 나옵니다
반환값에 대해선 아는대 제가 같은 문자열을 비교 했는대도 반환이 0이 아닌값으로 나옵니다
참고해보세요.
리눅스 지역설정. 언어설정. 파일이름등에서 euc-kr과 utf-8 혹은 unicode 등에 문자도 확인해보셔야 할거 같습니다.
fgets()를 사용하는 경우. \n 값이 함께 얻어져서 이와 같은 현상이 발생했나봅니다.
\r\n 도 확인해야 할겁니다.
pclose( fp); 를 해주셔야 합니다.
http://kldp.org/node/140681 이분도 비슷한 어려움이 있네요.
아래 소스는. 32비트 윈도우XP에서 cygwin으로 확인한 내용입니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기