2014. 7. 7. 17:30

실행파일 매개변수1 매개변수2 ... 여러개 넣어 실행하게 되면 이것을 출력해 주는 소스

#include <stdio.h>

int main(int argc, char **argv)
{
    int i;

    for (i=0; i < argc; i++)
    {
        printf("argv[%d] = %s\n", i, argv[i]);
    }

    return 0;
}



출력 예

> test0316.exe 1 2 3 "4 5 6"
argv[0] = test0316.exe
argv[1] = 1
argv[2] = 2
argv[3] = 3
argv[4] = 4 5 6




Posted by 해비
2014. 7. 7. 17:29


파일의 내용을 매개변수로 받아서 출력해 준다.

#include <stdio.h>
 
int main(int argc, char **argv)
{
    FILE *pFile = NULL;

    if(argc < 2)
    {
        printf("File Viewer v0.1 [USAGE] testcon1 [FILENAME]\n");
    }
    else
    {
        pFile = fopen(argv[1], "r");
    }

    if( pFile != NULL )
    {
        char strTemp[255];
        char *pStr;
 
        while( !feof( pFile ) )
        {
            pStr = fgets( strTemp, sizeof(strTemp), pFile );
            //printf( "%s", strTemp );
            printf( "%s", pStr );
        }
        fclose( pFile );
    }
    else
    {
        //에러 처리
        printf("Error - can not open file. \n");
    }
 
    return 0;
}


while 문 안에서 eof 가 아닌동안 계속해서 fgets 로 내용 읽어다가 출력을 반복하고 있다.

strTemp 의 크기가 255 이므로 254자(255번재는 마지막을 표시하는 문자) 단위로 읽어서 화면에 뿌려준다.



Posted by 해비
2014. 6. 11. 15:16



[1]

int main(int argc, char *argv[])


[2]

 int main(int argc, char **argv)


[1]로 하든 [2]로 하든 실제 컴파일 하여 실행해 보면 결과는 동일 했다.

인터넷 검색에서도 둘은 같은 내용이라는 것을 볼 수 있었으나, 직접 눈으로 확인하고 싶어서 아래의 과정을 거쳐 확인을 해 보았다.



확인방법은 gcc로 어셈변환 해서 어셈된 결과를 가지고 비교하는 것으로 하였다.

소스 는 아래와 같다.

argv.c

argv2.c

 #include <stdio.h>

int main(int argc, char *argv[])
{
        return 0;
}

 #include <stdio.h>

int main(int argc, char **argv)
{
        return 0;
}

표시된 부분이 차이점.



그리고 이것을 어셈변환한 결과 비교

어셈에 사용한 명령어
$ gcc -S -o argv.s argv.c



WinMerge로 비교 결과, 파일명을 제외한 모든 부분이 완전히 동일하다.

어셈코드가 동일하므로, 기계어로 컴파일되는 최종 결과물 또한 동일하다고 할 수 있다.





참고1. 두 구문의 동일성에 대한 내용은 StackOverflow 의 아래 링크에서 확인 하였습니다.
http://stackoverflow.com/questions/16666353/what-does-char-argv-means




Posted by 해비
2014. 4. 24. 09:40

다룰 내용...

1. 날짜 형식 변수 선언 및 날짜 데이터 입력

2. 두 날짜 From ~ To 사이의 일수 계산


// 1. Date형식의 변수에 날짜를 설정

DateTime FrDate = DateTime.ParseExact("20140422", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); // 시작

DateTime ToDate = DateTime.ParseExact("20140521", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); // 종료


// 2. 두 날짜 사이의 일수

TimeSpan ts1 = ToDate - FrDate;  // 2014년 5월 21일 - 2014년 4월 22일 = 29일 (+1로 보정해야 한다)


// 보정하고 정수형 변수에 담는다.

int Days = ts1.Days +1;


// 끝~~


+1 해주는 이유는...

예를 들어 1일 부터 3일 까지의 기간으로 했을 때, 실제로는 1일, 2일, 3일 이렇게 총 3일 이다.

하지만 날짜 계산에서 3 - 1 = 2가 되므로 시작일 하루를 가산하여 보정해 줘야 한다.


시작일 가산...? 다른 표현 방법이 떠오르진 않지만 여튼 뭐 그렇다.




더 좋은 방법 및 의견 코멘트 환영합니다.  ^__^


Posted by 해비
2013. 12. 5. 18:07

조금 특이한 케이스를 잡아서 소개합니다.

데이터셋과 콤보박스가 연결된 상태에서 발생하는 문제입니다.


해당 문제를 재현한 프로그램 

환경 : C#.NET 1.0 WinForm

상황 : ComboBox 컨트롤의 값을 코딩으로 변경하였는데 변경된 값이 실제로 반영되지 않는 문제.


WindowsApplication2.rar

(실행파일 & 소스 포함, C#. Net 1.0, VS .NET 2003 에서 컴파일 되었습니다.)



[[ 문제 상황 ]]

1. 콤보박스(ComboBox) 목록 등록

콤보박스(ComboBox)의 목록은 ValueMember, DisplayMember 속성을 테이블의 컬럼으로 지정 후, DataSource 속성에 테이블을 지정하는 방법으로 한다.


2. 실제 코드값(데이터)를 가져온 데이터셋이 필요


3. DataBingings 속성으로 2의 실제 코드값을 바인딩 처리


4. 코드상에서 콤보박스 값을 변경 후 데이터셋 값 확인



여기서 콤보박스의 SelectedValue 속성을 통해 값을 변경 하면, 화면에는 바뀐 값이 표시되나, 실제 데이터셋의 값은 처음 가져온 상태 그대로 변동이 없으므로 주의가 필요합니다.


1. 마우스로 콤보박스를 직접 선택하여 값을 변경하게 되면 변경된 값이 2항에 데이터셋에도 같이 변경되어집니다.

    마우스로 직접 건드리는 경우에는 데이터셋의 값이 함께 변경되어 지는 것을 확인 할 수 있습니다.

2. 마찬가지로 데이터셋을 직접 건드리면 바뀐 값이 콤보박스에도 그대로 반영됩니다.

3. 마우스로 직접 건들고 난 이후에는 데이터셋을 변경 하여도 콤보박스의 값이 바뀌어 지지 않습니다. 


즉, 데이터바인딩 된 개체의 값을 소스로 핸들링 시 컨트롤을 건들지 말고, 바인딩된 해당 데이터셋의 값을 고쳐야 한다는 것

(왜 그런지에 대한 이유는 모르겠습니다. 어쨋든 되는 방향 찾았으니 그걸로 또 하나의 삽질을 끝냅니다.)



혹, 원인 이라던가 좀 자세한 내용을 알고 계신분은 한수 가르쳐 주시면 감사하겠습니다 (__)



[2013/12/06]

정정합니다.

.Net 1.0 이 아닌 환경에서는 해당 문제가 발생하지 않는 것으로 보아 프레임워크 버그인듯 합니다.

.Net 4.5 Framework 만 설치된 컴퓨터에서 프로그램 실행시 증상이 나타나지 않는 것을 확인하였습니다.



Posted by 해비
2013. 3. 11. 08:58


ALTER TABLE 테이블명 (+ 아래 옵션)

 ADD              (컬럼 속성(길이));
 RENAME        COLUMN 컬럼 TO 컬럼;
 MODIFY        (컬럼 속성(길이));
 
MODIFY        (컬럼 속성(길이) DEFAULT 'Value');
 DROP            (컬럼);
 CONSTRAINT PK_테이블명 PRIMARY KEY(컬럼명)

*속  성 : NUMBER, VARCHAR2, DATE 등
*길  이 : 정수값
*테이블 : 테이블명
*컬  럼 : 컬럼명
*DEFAULT : 값 (값이 입력되지 않을 경우, 디폴트로 들어가는 값)


구문 예)

 ALTER TABLE 테이블 ADD (컬럼 속성(길이));
 ALTER TABLE TBLTEST ADD(UNICOST NUMBER(10));
 ALTER TABLE TBLTEST MODIFY(USE_YN VARCHAR2(1) DEFAULT 'Y');



좀 더 보기 쉽게 표로 정리 하였습니다.



Posted by 해비
2013. 3. 11. 08:50


INSERT

 INSERT INTO 테이블 VALUES (값, 값, 값...);
 INSERT INTO 테이블 (컬럼, 컬럼, 컬럼...) VALUES (값, 값, 값...);


UPDATE

 UPDATE 테이블 SET 컬럼=값 WHERE 컬럼=값

- WHERE 이하 생략가능
   (단, 생략시 모든 ROW를 대상으로 값을 세팅하므로 주의)


DELETE

 DELETE FROM 테이블 WHERE 컬럼=값

- WHERE 이하 생략가능
  (주의점은 UPDATE문과 동일)



Posted by 해비
2011. 8. 11. 10:14

자바스크립트에서의 배열선언 및 값 뽑아오기


1번 - 지정되지 않은 크기의 배열 객체를 선언 후, 값을 대입하는 코드 입니다.

2번 - 1번과 동일한 내용을 괄호 안에 늘어서 표기한 형태 입니다. (1과 동일한 내용입니다)

3번 - 반복문을 이용하여 배열의 내용을 출력합니다.

4번 - 반복문으로 처리가 불가능한 내용을 별도 출력 처리 합니다.



5번은 배열 선언의 다른 한 예시 입니다. (배열 생성 당시에 크기를 미리 고정되게 정하여 생성한 예시 입니다)




Posted by 해비
2011. 8. 11. 09:38

이번에는 객체의 리터럴 형태를 표현해 보도록 하겠다.


1은 일반적인 객체 생성이다.

2는 객체 리터럴 형식의 생성 이다.

3은 해당 값을 출력하기 위한 코드 이다.


위 코드에서 position 은 임의의 변수 이름이다
마찬가지로 left, top 속성도 임의로 준 것이다.

하지만 잘 돌아간다...



일반적인 프로그래밍 언어에서는 해당 객체를 생성하기 위한 클래스를 미리 정의해 두어야 하고, 해당 클래스에서 지원, 또는 작성 되어진 속성들만 사용이 가능 했는데 비해 자바스크립트에서는 임의로 속성값을 매기고 값을 대입, 그리고 다시 불러오는게 가능하다.

한가지 더...

객체 리터럴의 중첩 표현의 예시...



중괄호 안에서 다시 중괄호 열고 속성명:값 을 추가하면 된다.

그리고 해당 값의 접근은 아래 출력 예시 처럼 하면 된다.




Posted by 해비
2011. 8. 11. 09:16

리터럴이 뭔가...

궁금해서 구글신에게 문의해본 결과...


컴파일시 프로그램 내에 정의되어 있는 그대로 정확히 해석되어야 할 값...

들어가서 보니 정확히 명시된 어떤 값을 의미 하는것 이라고 한다.



x = 7 의 경우 7 이 리터럴 이다.

리터럴은 숫자 ,문자 또는 문자열 등 명확히 제시되는 어떤 값을 의미 하는듯 하다.




------------------------------------------------------------------------
하단의 출처에 주소로 들어가 봤더니...

텀즈 - IT관련 용어들을 정리 해 놓은 사이트 였네요... (용어 관련 으로 자주 들르게 될지도...)

Posted by 해비