C\#의 Main(String[]args)매개 변수 입력 문 제 를 분석 합 니 다.

4513 단어 MainStringargs
관련 테스트 코드 지정
우선,테스트 에 사용 할 Main(String[]args)매개 변 수 를 입력 하 는 코드 클래스 를 작성 합 니 다.다음 과 같 습 니 다

using System;

public class Hello
{
    public static void Main(String[] args)
    {
        switch (args[0])
        {
            case " ":
                Console.WriteLine(" ! !");
                break;
            case " ":
                Console.WriteLine(" ! !");
                break;
            default:
                Console.WriteLine(" ! !");

                break;
        }
        Console.WriteLine("args[1] :"+args[1]);
    }
}

테스트 가 실행 되 고 있 습 니 다.직접 실행 하면'색인 이 배열 의 경 계 를 넘 어 섰 습 니 다'는 오류 가 발생 합 니 다.왜 일 까요?이 럴 때 String[]args 는 아무런 내용 이 없 기 때문에 빈 배열 이 라 고 할 수 있 습 니 다.그러면 args[0]를 인용 하면 당연히 경 계 를 넘 는 오 류 를 초래 할 수 있 습 니 다.

그림:직접 실행 으로 인 한 오류
어떻게 args[0]의 인 자 를 입력 합 니까?
이제 어떻게 매개 변 수 를 우리 의 목적 을 달성 할 수 있 습 니까?두 가지 방법 이 있 습 니 다.
1.실행 하기 전에 우리 의 인 자 를 입력 할 수 있 도록 설정 합 니 다."솔 루 션"창 에서 항목 이름 을 오른쪽 단추 로 누 르 고"속성"을 선택 하 십시오.팝 업 된 새 창 에서"디 버 깅"->"시작 옵션"->"명령 행 인자"를 선택 하고 입력 할 string 매개 변수 값 을 입력 하 십시오.(다 중 매개 변수 사이 에 빈 칸 으로 구분)
2.우리 가 작성 한 테스트 코드 를 저장 합 니 다.예 를 들 어 Program.cs.그리고 SDK 에서(csc Program.cs)주의 경 로 를 컴 파일 합 니 다.Program.exe 의 파일(같은 디 렉 터 리 아래)을 얻 은 후에 우 리 는 SDK 에서 args 인 자 를 전송 할 수 있 습 니 다.방법 은 SDK 에 우리 가 컴 파일 한 파일 을 입력 하고 인자 와 함께 전송 하 는 것 입 니 다.Program.exe 사장 님 좋 은 아침 입 니 다.얻 은 정 보 는:
좋 은 아침!우 리 는 언제든지 당신 을 위해 힘 쓸 준비 가 되 어 있 습 니 다!args[1]의 값 은:좋 은 아침 입 니 다.
메모:1.여러 개의 인자 가 들 어 오 면 빈 칸 으로 분리 해 야 합 니 다.쉼표 를 사용 할 수 없습니다.형식:Program.exe 매개 변수 1 매개 변수 2...2.매개 변수의 개 수 는 코드 에 나타 난 매개 변수 개수 와 일치 해 야 합 니 다.그렇지 않 으 면'색인 이 배열 의 경 계 를 초과 합 니 다'는 이상 이 발생 할 수 있 습 니 다.

그림:먼저 컴 파일 한 다음 매개 변 수 를 입력 합 니 다.
이로써 성공!!!
질문:어떻게 프로그램 에서 args[]의 값 을 설정 합 니까?args[]는 args[0]="hello"형식 으로 직접 방문 할 수도 없고,args[0]=new String()방식 으로 구성 할 수도 없 으 니 전달 만 사용 해 야 합 니 다!다음 프로그램 은 직접 실행 하면 성공 할 수 있 지만 이상 한 try 블록 을 제거 하면 크로스 오 버 문제 가 발생 할 수 있 습 니 다.try 블록 의 역할 을 자세히 생각하면 main 매개 변수 전달 에 대해 더욱 깊이 이해 할 수 있 습 니 다

using System;

public class Hello
{
    static int i = 0;
    static void print()
    {
        i++;
        if (i == 1)
        {
            string[] S ={ " " };
            Main(S);
        }
        else
        {
            return;
        }
    }
    static void Main(string[] args)
    {
        print();
        try
        {
            switch (args[0])
            {
                case " ":
                    Console.WriteLine(" ! !");
                    break;

                case " ":
                    Console.WriteLine(" ! !");
                    break;
                default:
                    Console.WriteLine(" ! !");
                    break;
            }
        }
        catch
        {
            Console.WriteLine(" ,finish");
            Console.ReadKey();
        }
    }
}

이 프로그램 분석
우선 캡 처 이상 try 블록 을 제거 하 는 것 을 가정 합 니 다.try 블록 이 없 는 상황 에서 실행 순 서 는 Main()입구 에서 print()를 호출 하고 print()에서 S(S 는 부분 변수 이 며 print 에서 만 유효 합 니 다)를 설명 한 다음 Main(S)을 호출 하여 S 실행 Switch 를 전송 합 니 다.args[0]에"좋 은 아침 입 니 다!"우 리 는 언제든지 당신 을 위해 힘 쓸 준비 가 되 어 있 습 니 다!"print()호출 완료(이때 S 생명주기 종료).Main()로 돌아 가 계속 실행 합 니 다.switch 에 도착 할 때 string 은 전달 인용 에 속 하기 때문에 S 가 사 라 졌 습 니 다.arg[0]가 비어 있 고'색인 이 배열 경 계 를 초과 하 였 습 니 다'이상 한 오류 가 발생 했 습 니 다.
위 에서 알 수 있 듯 이 실제로 switch 블록 은 두 번 실행 해 야 합 니 다.지난번 에 한 함수 호출 에서 실행 되 었 고 args[0]의 값 이 들 어 갔 으 며 두 번 째 는 S 의 소멸 로 인해 args[0]가 비어 있 었 습 니 다.'색인 이 배열 의 경 계 를 초과 했다'는 이상 이 나 타 났 습 니 다.그러면 이상 try 블록 을 포착 하 는 원인 이 뚜렷 합 니 다.그것 은 switch 블록 의 두 번 째 운행 이 catch 에 직접 들 어 가 는 것 을 막 는 것 입 니 다.args[0]가 값 이 없 는 상태 에서 사용 되 는 것 을 방지 합 니 다.
이 프로그램 은 키워드 static 의 역할 에 주의 하여 확장 할 수 있 습 니 다.이 프로그램 을 반복 해서 연습 하면 끊임없이 파괴 하고 보강 하면 많은 이익 을 얻 을 수 있다.

좋은 웹페이지 즐겨찾기