실행파일 매개변수1 매개변수2 ... 여러개 넣어 실행하게 되면 이것을 출력해 주는 소스
#include <stdio.h> |
출력 예
> test0316.exe 1 2 3 "4 5 6" |
실행파일 매개변수1 매개변수2 ... 여러개 넣어 실행하게 되면 이것을 출력해 주는 소스
#include <stdio.h> |
출력 예
> test0316.exe 1 2 3 "4 5 6" |
파일의 내용을 매개변수로 받아서 출력해 준다.
#include <stdio.h> |
while 문 안에서 eof 가 아닌동안 계속해서 fgets 로 내용 읽어다가 출력을 반복하고 있다.
strTemp 의 크기가 255 이므로 254자(255번재는 마지막을 표시하는 문자) 단위로 읽어서 화면에 뿌려준다.
[1]
int main(int argc, char *argv[]) |
[2]
int main(int argc, char **argv) |
[1]로 하든 [2]로 하든 실제 컴파일 하여 실행해 보면 결과는 동일 했다.
인터넷 검색에서도 둘은 같은 내용이라는 것을 볼 수 있었으나, 직접 눈으로 확인하고 싶어서 아래의 과정을 거쳐 확인을 해 보았다.
확인방법은 gcc로 어셈변환 해서 어셈된 결과를 가지고 비교하는 것으로 하였다.
소스 는 아래와 같다.
argv.c |
argv2.c |
#include <stdio.h> |
#include <stdio.h> |
표시된 부분이 차이점.
그리고 이것을 어셈변환한 결과 비교
어셈에 사용한 명령어
$ gcc -S -o argv.s argv.c
WinMerge로 비교 결과, 파일명을 제외한 모든 부분이 완전히 동일하다.
어셈코드가 동일하므로, 기계어로 컴파일되는 최종 결과물 또한 동일하다고 할 수 있다.
참고1. 두 구문의 동일성에 대한 내용은 StackOverflow 의 아래 링크에서 확인 하였습니다.
http://stackoverflow.com/questions/16666353/what-does-char-argv-means
다룰 내용...
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가 되므로 시작일 하루를 가산하여 보정해 줘야 한다.
시작일 가산...? 다른 표현 방법이 떠오르진 않지만 여튼 뭐 그렇다.
더 좋은 방법 및 의견 코멘트 환영합니다. ^__^
조금 특이한 케이스를 잡아서 소개합니다.
데이터셋과 콤보박스가 연결된 상태에서 발생하는 문제입니다.
해당 문제를 재현한 프로그램
환경 : C#.NET 1.0 WinForm
상황 : ComboBox 컨트롤의 값을 코딩으로 변경하였는데 변경된 값이 실제로 반영되지 않는 문제.
(실행파일 & 소스 포함, 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 만 설치된 컴퓨터에서 프로그램 실행시 증상이 나타나지 않는 것을 확인하였습니다.
ALTER TABLE 테이블명 (+ 아래 옵션)
ADD (컬럼 속성(길이)); |
*속 성 : NUMBER, VARCHAR2, DATE 등
*길 이 : 정수값
*테이블 : 테이블명
*컬 럼 : 컬럼명
*DEFAULT : 값 (값이 입력되지 않을 경우, 디폴트로 들어가는 값)
구문 예)
ALTER TABLE 테이블 ADD (컬럼 속성(길이)); |
좀 더 보기 쉽게 표로 정리 하였습니다.
INSERT
INSERT INTO 테이블 VALUES (값, 값, 값...); INSERT INTO 테이블 (컬럼, 컬럼, 컬럼...) VALUES (값, 값, 값...); |
UPDATE
UPDATE 테이블 SET 컬럼=값 WHERE 컬럼=값 |
- WHERE 이하 생략가능
(단, 생략시 모든 ROW를 대상으로 값을 세팅하므로 주의)
DELETE
DELETE FROM 테이블 WHERE 컬럼=값 |
- WHERE 이하 생략가능
(주의점은 UPDATE문과 동일)