Aprendizagem de programação | sprintf erros comuns em C ++

sprintf é uma função variável, geralmente tem problemas quando usada e, enquanto houver um problema, geralmente é um erro de acesso à memória que pode causar o travamento do programa.

A seguir está um breve resumo dos erros comuns em sprintf:

1. Buffer overflow: O comprimento do primeiro parâmetro é muito curto Solução: Aumente o comprimento do primeiro parâmetro. Ao imprimir uma seqüência de caracteres, tente especificar o número máximo de caracteres na forma de "% .ns"

char buf [5];

sprintf (buf, ":% d", 3246);

printf ("buf é% s \ n", buf);

Modifique buf para char buf [6]

2. Esqueça o primeiro parâmetro: a razão é que printf está acostumado com o hábito, e ocasionalmente esqueço

char buf [6];

sprintf (":% d", 3246);

printf ("buf é% s \ n", buf);

Mensagem de erro: erro C2664: 'sprintf': não é possível converter o parâmetro 2 de'int 'em'const char *'

3. Problemas com correspondência de parâmetro variável: geralmente esquecido de fornecer um parâmetro variável correspondente a um determinado formato de caractere, fazendo com que todos os parâmetros futuros fiquem desalinhados. Especialmente os parâmetros correspondentes a "*", todos são fornecidos?

Não atribua um número inteiro a um "% s"

char buf [100];

int a = 6;

sprintf (buf, ":% d,% s", 3246, a);

printf ("buf é% s \ n", buf);

Lembrete: a deve corresponder a% d em vez de% s

4. Existem também os seguintes erros, só posso me importar se não souber como descrevê-los. Agora dê exemplos de códigos errados e códigos corretos. Vamos ver por si mesmo ~~

Código errado

char buf [15];

char a1 [] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};

char a2 [] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};

sprintf (buf, "% s% s", a1, a2); // Existem caracteres truncados, o resultado não é o que precisamos

printf ("buf é% s \ n", buf);

Código correto

char buf [15];

char a1 [] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};

char a2 [] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};

sprintf (buf, "% .7s% .7s", a1, a2); // 产生 : "ABCDEFGHIJKLMN"

printf ("buf é% s \ n", buf);

 

Além disso, se você quiser melhorar sua capacidade de programação, aprenda a linguagem C e a programação C ++! Ultrapassagem em curva, um passo mais rápido! Posso ajudá-lo aqui ~

Compartilhamento (código-fonte, vídeo do projeto real, notas do projeto, tutorial introdutório básico)

Bem-vindos parceiros que mudam de carreira e aprendem programação, usam mais informações para aprender e crescer mais rápido do que pensar nisso você mesmo!

Aprendizagem de programação:

Aprendizagem de programação:

 

Acho que você gosta

Origin blog.csdn.net/weixin_45713725/article/details/114393631
Recomendado
Clasificación