Disabilità scanf_s () di un principiante
Domanda
int main(void) {
char tmp, arr[100];
int i, k;
printf("Enter a string: ");
scanf_s("%s", arr);
for ( k = 0, i = (strlen(arr) - 1); k < (int) (strlen(arr) / 2); --i, ++k) {
tmp = arr[k];
arr[k] = arr[i];
arr[i] = tmp;
}
puts(arr);
return 0;
}
So che c'è qualcosa di strano in scanf_s () ma NON sono riuscito a risolvere il problema. Il mio codice funziona bene usando scanf () ma questo NON inverte gli elementi dell'array :( Qualsiasi aiuto sarà molto apprezzato. Grazie.
Soluzione
scanf_s richiede che la dimensione del buffer in caratteri sia passata come secondo parametro.
int iNumFilled1 = scanf_s("%s", arr);
int iNumFilled2 = scanf_s("%s", arr, _countof(arr));
assert(iNumFilled1 == 0);
assert(iNumFilled2 == 1);
Puoi anche passare un identificatore di larghezza. Se passato e non si adatta al buffer, avrai solo i primi caratteri "larghezza specificata".
//Input a string longer than 99 chars
int iNumFilled3 = _tscanf_s(_T("%99s"), arr, _countof(arr));
assert(iNumFilled3 == 1);
//Again insert a string longer than 99 chars, but with no width specifier
int iNumFilled4 = _tscanf_s(_T("%s"), arr, _countof(arr));
assert(iNumFilled4 == 0);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow