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 배열 만 cValues
if
블록 널 종료? MSDN 예제 블록 achKey
cSubKeys
if
의 TCHAR 배열은 동일한 절차를 따르지 않습니다.
감사합니다.
null-termination에 대한 내 생각에 'achValue'가'RegEnumValue '가 데이터를 쓰지 않는 경우 (오류 등)에는'achValue '가 null로 종료되도록 보장 할 수 있습니다. 'if' 블록에서 null로 끝나기 만합니다. 사용 된 유일한 장소이기 때문입니다. 'achKey'와 다른 점은 무엇입니까? 모르겠다. 아마도 그저 그 예일 뿐이 기 때문일 것이다. 필요한 경우 페이지에 항목을 추가하십시오. – icabod
@icabod 함수가 성공하면 문자열 만 읽습니다. –