:C의 명령 줄 인수에서 Null 문자를 전달하는 방법은 무엇입니까?
"\ 0be \ 0or에 \ 0 ~ \ 0 \ 0 \ 0 "
그런 다음 구문 분석하십시오. 프로그램으로이 문자열 처리 것이다 그러나 :
을 "에 \\ 0be \\ 0or \\ 0not \\ 0 ° \\ 0be \\ 0"나는이 문제를 해결할 수있는 방법
? 어떤 방법이 있습니까?
:C의 명령 줄 인수에서 Null 문자를 전달하는 방법은 무엇입니까?
"\ 0be \ 0or에 \ 0 ~ \ 0 \ 0 \ 0 "
그런 다음 구문 분석하십시오. 프로그램으로이 문자열 처리 것이다 그러나 :
을 "에 \\ 0be \\ 0or \\ 0not \\ 0 ° \\ 0be \\ 0"나는이 문제를 해결할 수있는 방법
? 어떤 방법이 있습니까?
C 문자열은 null로 끝나는, 그래서 당신은 단지 사용자 입력에 (\0
을 변환 할 수있는 방법을 원하는 경우 NUL 문자를 포함하는 통과 문자열, 즉,
이제 C. - P에 "\\0"
수 없습니다 C 문자열로)을 실제 NUL 문자로 변환하는 것은 다른 문제입니다. 이 경우 프로그램에서는 구분자로 \0
을 처리하기위한 파서 만 있으면됩니다.
글쎄, 그렇긴하지만 표준 라이브러리 함수를 사용할 수는 없다 ... –
@Chinmay : 적어도 유닉스 ('execve'와 그 형제)와 Windows ('CreateProcess'), NUL에서 모든 다듬기 문자열. 따라서 라이브러리는 물론 OS 수준입니다. :-) –
충분히 공정 :-) –
수 없습니다.
C 프로그램은 인수를 0으로 끝나는 문자열로 수신합니다. 이러한 문자열은 정의에 따라 null 문자를 포함 할 수 없습니다.
null 문자를 전달하려면 일부 구문으로 인코딩해야하며 C 프로그램은 해당 구문을 해석하여 해독해야합니다.
'xargs -0'처럼 stdin에서 읽을 수도 있습니다. –
우분투에서'./prog $ (python -c "print 'aa \ x00bb'")'를 실행하면 C 프로그램은 인수를 'aabb'로 얻습니다. 즉, 널 바이트에서 문자열을 종료하는 대신, 그것은 그것을 무시했다. 이게 너에게 의미가 있니? – gsingh2011
Bash는 여전히 Python과 C 프로그램 사이에 있습니다. Bash는 파이썬 호출 (null 바이트 포함)에 의해 생성 된 바이트를 수집하고이 바이트 중 C 프로그램에 대한 인수 문자열을 작성했습니다. 분명히 Bash는 null 바이트를 특수하게 처리합니다. 대신 문자열을 자르지 않고 건너 뜁니다. –
이 동작은 프로그램 외부에서 발생하기 때문에 어떤 OS (및 OS에 여러 셸이있는 경우 셸)를 알면 도움이됩니다. –
물론, 미안 해요. 리눅스에서 bash 쉘. – Tom
다른 문자를 사용하여 '0x00'대신 인수를 분리하는 것에 대해 너무 문제가됩니까? 왜 표준 공간 ('0x20')이나 다른 문자 ('0x01')를 사용하지 않을까요? –