vc ++ 디버거에서 strlen ()이 를 반환하는 이유는 무엇입니까? [닫은

StackOverflow https://stackoverflow.com/questions/576396

  •  05-09-2019
  •  | 
  •  

문제

C ++ 유형의 문자열이 있습니다 const char* Strlen에게 논쟁으로 통과되었지만 무효가되게됩니다.

그것은 비슷합니다

strlen(astruct.string);

감사..

편집 : 약간의 확인을했고

strlen("test");

여전히 빈 공간을 준다 .. 왜?

편집 : 여기 이미지가 있습니다http://img14.imageshack.us/img14/1808/strlen.png

이전에 불분명 한 죄송합니다. 서식은 잘 작동하지 않았습니다. 어쨌든, 혼란은 Evan Teran과 Vlad Romascanu에 의해 해결되었습니다. 또한 Brian R. Bondy의 대답을 살펴보십시오.

감사. 자유롭게 닫으십시오.

도움이 되었습니까?

해결책

스크린 샷 참조 : 디버거가 표시됩니다. <void> ~을 위한 strlen(...) 실제로 오류가 표시되어야합니다.

디버거 시계에서 메소드를 호출하고 결과를 표시 할 수 없습니다. 디버거는 기존 변수와 데이터 만 표시됩니다. 방법이 코드의 저자 나 디버거에 의해 예상되지 않은 방식으로 디버깅되는 프로그램의 상태를 변경할 수 있기 때문에 요청시 임의의 메소드를 호출 할 수 없습니다.

당신이 할 수있는 것은 코드에서 일시적으로 추가하는 것입니다.

size_t tmp_len = strlen(struc.string);

그런 다음 컴파일 한 다음 TMP_LEN을 시계에 추가하십시오.

다른 팁

Visual Studio 6.0의 엉뚱한 디버거에 의해 혼란스러워합니다. 이것에 의존하지 마십시오. 인라인 또는 비슷한 무언가로 인해 반환 값을 얻을 수 없었을 것입니다.

실제 가치를 얻으려면 값을 인쇄하십시오.

편집 : 또한 예에서, 당신은 어쨌든 strlen의 결과를 저장하지 않을 것 같습니다. 이것은 또한 디버거가 반환 값을 보지 못하는 이유 일 수도 있습니다. 컴파일러가 값을 사용하지 않으면 실제로 strlen을 실행할 필요가 없다고 결정했을 가능성이 있습니다.

참고 :이 시점에서 아직 VC ++ 6.0 사용. 그것은 고대 컴파일러이자 IDE로, 부끄러운 C ++ 컴파일러입니다. Visual C ++ 컴파일러의 최신 버전은 무료 (IDE없이) 무료입니다.

strlen은 반환 유형 무효가 아니며, 올바른 메시지를 제공하지 않는 디버거입니다.

왜 당신의 데버거가 무효를 보이는가?

사용중인 strlen의 구현은 아마도 #define strlen someothername_strlen 주위에 포장 될 것입니다.

디버거는 아마도 #Define을 올바르게 지원하지 않거나 기능의 다른 수정자를 지원하지 않을 것입니다.

ilen = strlen ( "테스트")과 같은 작업을 수행 한 다음 시계에서 Ilen을 확인해야합니다.

일반적으로 시계에서 기능을 호출 할 수 있습니다. 예를 들어 다음 기능을 정의한 다음 시계에서 호출하십시오.

int testFunc(char*)
{
  return 5;
}

결과적으로 시계에서 5를 얻을 수 있습니다.

Strlen은 정수를 반환하므로 "0"을 반환한다는 것을 의미한다고 가정합니다.

또한 데이터 유형을 지정하는 방법은 Const Char *또는 Const Char **인지 알 수 없습니다. 그것이 후자라면, 당신은 **를 단일 *로 비교하고 있는지 확인해야합니다.

내 생각에 문자열은 널 바이트로 시작하여 0이 되돌아가는 이유입니다.

C ++에서 함수는 항상 반환으로 선언 된 유형의 값을 반환합니다. 이후 strlen 함수 선언은 다음과 같습니다.

size_t strlen(const char *);

그것이 할 수있는 유일한 것 혹시 반환은 a입니다 size_t. 컴파일러는 컴파일 시간 에이 정보를 사용하여 함수를 호출 할 때 리턴 값을 처리하는 방법을 결정합니다. 여기서 요점은 strlen 기능은 위와 같이 선언되어 있으며 반환을 결정할 수 없습니다. void 때때로 유형의 값 size_t 다른 시간.

이것은 일반적으로 C ++와 같은 정적으로 입력 된 언어의 특징입니다. 동적으로 입력 한 언어 (Perl, Python, Ruby, PHP 등)에서 함수는 호출 할 때마다 모든 유형의 값을 반환하기로 결정할 수 있습니다.

void를 반환 할 수 없습니다. void는 반환 값이 부족하기 때문에, 당신은 그것을 오류, 반환 할 수는 없습니다.

어쨌든 무효를 어떻게 확인합니까? void는 값이 아닙니다. 당신이 어떻게 공허하게되는지 보여주십시오. 컴파일 타임입니까 아니면 런타임입니까?

실제로 시스템이있는 경우 strlen a로 선언됩니다 void 반환 유형, 다른 방향으로 최대한 빨리 실행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top