C\#의 Main(String[]args)매개 변수 입력 문 제 를 분석 합 니 다.
우선,테스트 에 사용 할 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 의 역할 에 주의 하여 확장 할 수 있 습 니 다.이 프로그램 을 반복 해서 연습 하면 끊임없이 파괴 하고 보강 하면 많은 이익 을 얻 을 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
System.out.println performanceAny system that logs vast amounts of information, needs to think about performance. The activity of logging cannot be a ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.