Je suis perplexe par la différence suivante dans le comportement:fscanf/fscanf_s différence de comportement
// suppose myfile.txt contains a single line with the single character 's'
errno_t res;
FILE* fp;
char cmd[81];
res = fopen_s(&fp, "D:\\myfile.txt", "rb");
fscanf(fp,"%80s",cmd); // cmd now contains 's/0'
fclose(fp);
res = fopen_s(&fp, "D:\\myfile.txt", "rb");
fscanf_s(fp,"%80s",cmd); // cmd now contains '/0' !
fclose(fp);
Les résultats ne dépendent pas de l'ordre de l'appel (c.-à-appeler fscanf_s d'abord, vous obtiendrez le vide chaîne en premier). Compilé sur VC++ - VS2005. Quelqu'un peut-il se reproduire? Quelqu'un peut-il expliquer?
Merci!
Cela semble être exactement la mauvaise utilisation. '81' est censé être la taille du tampon' cmd'. Mais est-ce? C'est un bon moyen d'écrire du code qui plante, même en utilisant une fonction "sécurisée". Il devrait y avoir 'sizeof (cmd)' en cas de lecture dans un tableau statique de caractères, une variable qui stocke la longueur à laquelle le tampon est alloué, ou une fonction d'appel à la taille/capacité d'un tampon donné. Bien que votre exemple soit techniquement correct, il peut être trompeur pour beaucoup de gens. –