그래서 C에서 약 1 년 동안 아무 것도 쓰지 않았고 오늘 아침에 뭔가 쓸 것이라고 생각했습니다. 나/아주/빨리 문제가 발생했습니다. 아래의 매우 기본적인 코드가 실행되지 않습니다 : 나는 다음과 같은 오류가C 컴파일러에 따라 C 명령 줄 인수가 int입니다. 무슨 일이야?
gcc dink.c -o dink
dink.c: In function ‘main’:
dink.c:6:2: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]
./dink menkmenk
make: *** [all] Segmentation fault (core dumped)
에 가야 뭐죠
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv)
{
printf("arg is %s \n", argv[1]);
}
?
편집 : 나는 코드가 작동하지 않는 이유에 대한 답변을 얻고 있지만 컴파일러가 두 번째 인수에 int를 보유하고 있다고 생각하는 이유를 알고 싶습니다.
답변을 주셔서 감사합니다. 그러나 C가 왜 char을 int로 승격하려고 시도 했나요? – MYV
용어 : 첫 번째 예제에서'2'를'float'로 변환하는 것은 "일반적인 산술 변환"의 일부입니다. * 표준 *이 "판촉"이라고 부르는 항목의 일부가 아닙니다. 영어로는 가치 보존 형을 더 큰 유형으로 변환하여 "판촉"이라고 부르는 것이 합리적입니다. 질문자 코드에서'char'에서'int' 로의 변환은 varargs 인수 표현식 (C99의 6.5.2.2/7)에 적용되는 "기본 인수 승격"때문입니다. –