Funções de biblioteca integradas para entrada do usuário | sscanf, scanf_s, fscanf_s, sscanf_s
A linguagem de programação C fornece várias funções de biblioteca integradas para entrada do usuário. Neste artigo aprenderemos sobre as funções da biblioteca sscanf scanf_s fscanf_s sscanf_s em C.
1. Função sscanf() em C
sscanf() é usado para ler a entrada formatada da string. Ambas as funções scanf() e sscanf() são semelhantes, a única diferença entre elas é que a função scanf() lê a entrada do usuário a partir da entrada padrão como um teclado e a função sscanf() lê a entrada de uma string e armazena a entrada em outra string.
Sintaxe
int sscanf ( const char * str const char * format ...);
Parâmetros
- Em caso de sucesso, a função retorna o número de valores lidos com sucesso.
- No caso de uma falha de entrada antes que qualquer dado possa ser lido com êxito, o EOF é retornado.
- Em caso de sucesso, a função retorna o número de valores lidos.
- No caso de uma falha de entrada antes que qualquer dado possa ser lido com êxito, o EOF é retornado.
- Se o tamanho do buffer for igual ou menor que o tamanho da matriz, inserir maior ou igual ao tamanho do buffer levará à perda de dados, pois os dados em excesso serão truncados e os dados até o tamanho do buffer - 1 serão lidos.
- Se o tamanho do buffer for maior que o tamanho de um array, então
- inserir um tamanho menor que o tamanho do buffer funcionará, mas causará um erro
- inserir um tamanho maior que o tamanho do buffer levará ao estouro do buffer e causará o mesmo erro.
- Em caso de sucesso, a função retorna o número de valores lidos com sucesso.
- No caso de uma falha de entrada antes que qualquer dado possa ser lido com êxito, o EOF é retornado.
- Em caso de sucesso, a função retorna o número de valores lidos com sucesso.
- No caso de uma falha de entrada antes que qualquer dado possa ser lido com êxito, o EOF é retornado.
Valor de retorno
Observação : deve haver pelo menos tantos argumentos quanto o número de valores armazenados pelos especificadores de formato.
Exemplo: Programa C para ilustrar a função sscanf
C // C program to illustrate sscanf statement #include int main () { // declaring array s char s [] = '3 red balls 2 blue balls' ; char str [ 10 ] str2 [ 10 ]; int i ; // %*s is used to skip a word sscanf ( s '%d %*s %*s %*s %s %s' & i str str2 ); printf ( '%d %s %s n ' i str str2 ); return 0 ; }
Saída
3 blue balls
2. Função scanf_s() em C
Esta função é específica para compiladores Microsoft. É o mesmo que scanf, exceto que não causa sobrecarga de buffer. A função scanf_s() é mais segura do que a função scanf(), pois fornece um parâmetro adicional para especificar o tamanho do buffer que pode evitar estouro de buffer.
Sintaxe
int scanf_s (const char *format [argument]...);
Parâmetros
Observação : Aqui podemos especificar o tamanho do buffer e realmente controlar o limite da entrada para que todo o aplicativo não trave devido ao excesso de memória.
Valor de retorno
Por que usar scanf_s()?
scanf apenas lê qualquer entrada fornecida pelo console. C não verifica se a entrada do usuário caberá na variável que você designou. Se você tiver um array chamado color[3] e usar scanf para a string Red, ele funcionará bem, mas se o usuário inserir mais de 3 caracteres, scanf começará a gravar na memória que não pertence ao array de cores.
C não detectará isso ou avisará você e poderá ou não travar o programa, dependendo se algo tentar acessar e gravar naquele slot de memória que não pertence ao array de cores. É aqui que o scanf_s entra em ação. scanf_s verifica se a entrada do usuário caberá no espaço de memória fornecido.
Observação : scanf_s() funcionará apenas no Microsoft Visual Studio.
Exemplo 1: Programa C para ilustrar a função sscanf_s
C // C program to illustrate sscanf_s statement // scanf_s() will only work in Microsoft Visual Studio. #include #include int main () { char a [ 5 ]; // sizeof(a) is buffer size scanf_s ( '%s' a sizeof ( a )); printf ( ' n %s ' a ); return 0 ; }
Entrada 1
Red
Saída 1
Red
Entrada 2
Yellow
Saída 2
No Output
Exemplo 2: Programa C para ilustrar a relação entre o tamanho do buffer e o tamanho do array.
C++ // C++ program // consumes the Enter key // (newline character) pressed after input #include int main () { // example char ch [ 100000 ]; printf ( 'Enter characters: ' ); scanf_s ( '%s' ch 99999 ); getchar (); return 0 ; }
C // C program // consumes the Enter key // (newline character) pressed after input #include int main () { char ch [ 100000 ]; printf ( 'Enter characters: ' ); scanf_s ( '%s' ch 99999 ); getchar (); return 0 ; }
3. Função fscanf_s() em C
A diferença entre fscanf() e fscanf_s() é a mesma de scanf() e scanf_s(). fscanf_s() é uma função segura que requer que o tamanho de cada campo do tipo c C s S e [ ] seja passado como um argumento imediatamente após a variável.
Sintaxe
int fscanf_s( FILE *stream const char *format [argument ]... );
Parâmetros
Observação : fscanf_s possui um parâmetro extra para especificar o tamanho do buffer e realmente controlar o limite da entrada.
Valor de retorno
Observação : fscanf_s funcionará apenas no MS Visual Studio.
Exemplo: Programa C para ilustrar a função fscanf_s
C // C program to illustrate fscanf_s statement // This program will run on MS Visual studio #include #include int main () { char s1 [ 10 ] s2 [ 10 ] s3 [ 10 ]; int year ; // file pointer FILE * fp ; // Open file securely fopen_s ( & fp 'file.txt' 'w+' ); fputs ( 'Hello World its 2017' fp ); rewind ( fp ); // Using fscanf_s fscanf_s ( fp '%s' s1 sizeof ( s1 )); fscanf_s ( fp '%s' s2 sizeof ( s2 )); fscanf_s ( fp '%s' s3 sizeof ( s3 )); fscanf_s ( fp '%d' & year sizeof ( year )); printf ( 'String1 |%s| n ' s1 ); printf ( 'String2 |%s| n ' s2 ); printf ( 'String3 |%s| n ' s3 ); printf ( 'Integer |%d| n ' year ); fclose ( fp ); return ( 0 ); }
Saída
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Função sscanf_s() em C
sscanf_s() é uma função segura de sscanf() e funções seguras exigem que o tamanho de cada campo c C s S e [ type seja passado como um argumento imediatamente após a variável.
Sintaxe
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parâmetros
Observação : sscanf_s possui um parâmetro extra para especificar o tamanho do buffer e realmente controlar o limite da entrada.
Valor de retorno
Observação : sscanf_s() funcionará apenas no Microsoft Visual Studio.
Exemplo: Programa C para ilustrar a função sscanf_s
C // C program to illustrate sscanf_s statement // This program will run on MS Visual studio #include int main () { char s [] = '3 red balls 2 blue balls' ; char str [ 10 ] str2 [ 10 ]; int i ; // %*s is used to skip a word sscanf_s ( s '%d' & i sizeof ( i )); sscanf_s ( s '%*d %*s %*s %*s %s' str sizeof ( str )); sscanf_s ( s '%*d %*s %*s %*s %*s %s' str2 sizeof ( str2 )); printf ( '%d %s %s n ' i str str2 ); return 0 ; }
Saída
3 blue balls
Criar questionário
Você Pode Gostar
Principais Artigos
Categoria
Artigos Interessantes