2014-06-18 9 views
0

레지스트리 하위 키를 열거 할 때 MSDN의 예를 따라 왔습니다. achValue[0] = '\0';이 필요한 이유를 다음 코드에서 for 루프에서 레지스트리 값을 열거 할 때 TCHAR 배열을 Null 종료해야하는 이유는 무엇입니까?

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724256%28v=vs.85%29.aspx

, 나는 이해가 안 돼요. HKCU 및 HKCU \ Console을 쿼리하는 일부 테스트를 실행했으며 출력이 예상대로였습니다. 그런 다음 동일한 테스트를 실행하여 주석 처리 된 결과와 동일한 출력을 얻었습니다. 나는 첫 번째 TCHAR을 null로 끝내면 TCHAR 배열이 각 값 이름 ( achValue)을 연결하지 못하게 될 것이라고 생각했지만 의심의 여지없이 올바르지 않습니다. 또한

if (cValues) 
{ 
    printf("\nNumber of values: %d\n", cValues); 

    for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
    { 
     cchValue = MAX_VALUE_NAME; 
     achValue[0] = '\0'; 
     retCode = RegEnumValue(hKey, i, 
      achValue, 
      &cchValue, 
      NULL, 
      NULL, 
      NULL, 
      NULL); 

     if (retCode == ERROR_SUCCESS) 
     { 
      _tprintf(TEXT("(%d) %s\n"), i+1, achValue); 
     } 
    } 
} 

왜 TCHAR 배열 만 cValuesif 블록 널 종료? MSDN 예제 블록 achKeycSubKeysif의 TCHAR 배열은 동일한 절차를 따르지 않습니다.

감사합니다.

+0

null-termination에 대한 내 생각에 'achValue'가'RegEnumValue '가 데이터를 쓰지 않는 경우 (오류 등)에는'achValue '가 null로 종료되도록 보장 할 수 있습니다. 'if' 블록에서 null로 끝나기 만합니다. 사용 된 유일한 장소이기 때문입니다. 'achKey'와 다른 점은 무엇입니까? 모르겠다. 아마도 그저 그 예일 뿐이 기 때문일 것이다. 필요한 경우 페이지에 항목을 추가하십시오. – icabod

+0

@icabod 함수가 성공하면 문자열 만 읽습니다. –

답변

2

이 예는 오해의 소지가 있습니다. 이 함수는 입력시 값을 null로 종료 할 필요가 없습니다.

문제의 코드 줄을 제거 할 수 있습니다. 분명히 선을 포함하는 데 아무런 해를 끼치 지 않지만, 불필요합니다.