2014-06-18 3 views
0

J'ai suivi l'exemple de MSDN sur l'énumération des sous-clés de registre.Pourquoi est-il nécessaire de mettre à zéro un tableau TCHAR lors de l'énumération des valeurs de registre dans une boucle for?

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

Dans le code suivant, je ne comprends pas pourquoi achValue[0] = '\0'; est nécessaire. J'ai effectué quelques tests en interrogeant HKCU et HKCU \ Console et la sortie était comme prévu. J'ai ensuite exécuté le même test avec la ligne commentée et j'ai obtenu le même résultat. Je pensais que la terminaison NULL du premier TCHAR empêcherait le tableau TCHAR de concaténer chaque nom de valeur (achValue), mais c'est indubitablement incorrect.

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); 
     } 
    } 
} 

Aussi, pourquoi le tableau ne TCHAR terminée par zéro dans le bloc cValuesif? Le tableau TCHAR achKey dans le bloc cSubKeysif de l'exemple MSDN ne suit pas la même procédure.

Merci.

+0

Ma supposition pour la terminaison nulle est qu'elle vous permet de garantir que 'achValue' est terminée par un caractère nul dans le cas où' RegEnumValue' n'écrit pas de données dedans (en cas d'erreur, etc.). Il est seulement terminé par un caractère nul dans le bloc 'if', car c'est le seul endroit où il est utilisé. Pourquoi est-ce différent pour 'achKey'? Je ne sais pas, peut-être parce que c'est juste un exemple. Ajoutez quelque chose à la page si vous pensez en avoir besoin. – icabod

+0

@icabod la chaîne est seulement lue si la fonction réussit –

Répondre

2

L'exemple est trompeur. La fonction ne nécessite pas que la valeur en entrée soit terminée par un caractère nul.

Vous pouvez supprimer la ligne de code en question. Cela ne fait évidemment aucun mal d'inclure la ligne, mais c'est superflu.

Questions connexes