2010-09-02 10 views
1

C++ fonction, strtok()cplusplus.comstrtok - dépassement de mémoire tampon

Est-ce que cet exemple souffrir de dépassement de mémoire tampon si str ne se termine pas correctement?

/* strtok example */ 
/* source - cplusplus.com (see link below) */ 
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] ="- This, a sample string."; 
    char * pch; 
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str," ,.-"); 
    while (pch != NULL) 
    { 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " ,.-"); // walk the stack? 
    } 
    return 0; 
} 

Si str ne se termine pas correctement avec "\ 0", est-il pas possible pour

pch = strtok (NULL, " ,.-"); 

marcher la pile?

Merci!

+2

La manière la plus simple de penser à ceci est que si 'str' n'est pas correctement terminé, alors * ce n'est pas une chaîne de style C *. C'est juste quelques caractères. Passer autre chose qu'une chaîne C à 'strtok' est une mauvaise nouvelle, bien sûr. –

+0

Est-ce que c'est pour du piratage de casquettes blanches? – Chubsdad

Répondre

1

La plupart des fonctions de gestion de chaîne quitteront la fin si la chaîne n'est pas terminée par un caractère nul.

Cependant, dans votre exemple de code, str est terminé.

+0

Roger ça. Mon exemple le montre, mais si j'utilisais une fonction sans terminaison de chaîne, un dépassement de tampon pourrait se produire. merci! –