이것은 실용적인 것이 아니라 지금이 시점에서 개념적으로 더 많은 질문이지만 실제로는 저를 괴롭 히고 있습니다.sizeof를 사용하여 argv에서 문자열의 크기 찾기
"test.c"라는 C 프로그램이 있으며 사용자가 인수로 입력하는 단어가 배열에있는 공백 수를 찾고 싶다고 가정 해 보겠습니다. 예를 들어, "./test.c test_run"은 8자를, 그리고 널 문자를 종료하기 때문에 9를 출력해야합니다. argv에 sizeof를 사용하려고 할 때 약간의 문제가 있습니다.
int main(int argc, char *argv[]) {
char buf10[10];
printf("The size of buf10 is: %i.\n", sizeof(buf10));
return 0;
}
이 결과를 출력 "buf10의 크기는 다음 10". char 배열을 선택했기 때문에 이것은 의미가 있습니다. C에서 char의 크기는 1 바이트입니다. int를 선택하면이 숫자는 4가됩니다.
이제 제 질문으로 왜 argv에서이 작업을 수행 할 수 없습니까? 이 9되어야하지만, 마이너스는 \ "0"제
제작하므로
가argv[1] has the value: Hello_SO
strlen of argv[1] is: 8
sizeof of argv[1] is: 4
문자열 길이 말이 :
int main(int argc, char *argv[]) {
printf("argv[1] has the value: %s\n", argv[1]);
printf("strlen of argv[1] is: %i\n", strlen(argv[1]));
printf("sizeof of argv[1] is: %i\n", sizeof(argv[1]));
return 0;
}
"./test Hello_SO"와 RAN은 출력을 제공한다 그러나 sizeof가 4 (포인터의 크기)를 반환하는 이유를 이해하지 못합니다. 나는 * argv []가 ** argv로 간주 될 수 있음을 이해한다. 그러나 나는 이것을 이미 설명했다. 첫 번째 예제에서는 "buf"를 인쇄하지만 여기서 "argv [1]"을 인쇄합니다. strlen을 사용하여 쉽게 답을 얻을 수 있다는 것을 알지만, 이전에 말했듯이 지금은 개념적입니다.
아마도 당신 자신의 질문에 답한 것 같습니다. – alex
'argv [1]'은 타입'char *'을 가지고 있으므로'sizeof argv [1]'은'sizeof (char *)'를 의미합니다. 그것이 sizeof의 기능입니다. –
하지만 buf10은 10을 인쇄하고 argv [1]은 9를 인쇄하지 않습니다. buf10도 포인터가 아닙니까? –