Without a Break

sscanf, Argc/Argv Programming 본문

Software/소프트웨어보안

sscanf, Argc/Argv Programming

와븨 2022. 10. 3. 02:11

Argc/Argv

: 함수의 명령 인수.

  • argc : 메인 함수에 전달되는 정보의 개수
  • argv []: 메인 함수에 전달되는 실질적 정보 (문자열의 배열)
#include <stdio.h>

int main(int argc, char * argv[]){
	int count;
	printf("This program was called with \"%s\".\n",argv[0]);
	if(argc > 1){ //외부에서 사용자 입력이 있는지 확인(1보다 크면 참)
		for(count = 1; count<argc; count++){
			printf("argv[%d] = %s\n", count, argv[count];
        }
    }
    else {
    	printf("The command had no other arguments.\n");
    }
    return 0;
}

 

 

포인터의 배열. 각 포인터가 사용자가 입력한 내용을 가리킴

 

 

sscanf

: 버퍼에서 포맷을 지정하여 읽어오는 함수

/* sscanf example */
#include <Stdio.h>

int main()
{
char sentence [] = "John is 12 years old";
char str[10];
int i;

sscanf(sentence, "%s is %d",str,&i); //%s = John(str), %d = 12(i)
printf("%s->%d\n",str,i); //John -> 12

return 0;
}

 

 

/* sscamf example 2*/
#include <stdio.h>

int main()
{
char sentence [] = "John park is 1238179278479183749173 years old";
char str [10];
int i; //int형이기 때문에 2의 보수

sscanf (sentence, "%s is %d",str,&i); //123...가 너무 큰 숫자라서 바운더리를 넘어감 => integer overflow
printf("%s -> %d\n"str,i);

return 0;
}

integer overflow 발생