Porque tal programa excede os 10 caracteres do char?

Porque o seguinte programa no codeblocks excede os 10 caracteres do scanf aprimorado,se eu digitar o nome PietroMartinsDeOliveira?

#include <stdio.h>

int main(){

char s[10];

printf("Digite algo(scanf convencional1):\n");
scanf("%s",s);
fflush(stdin);

printf("Resultado:%s\n\n",s);
printf("Digite algo(scanf aprimorado):\n");
scanf("%10[^\n]s",s);
fflush(stdin);

printf("Resultado:%s\n\n",s);







}

Estou usando o codeblocks no Linux mint.

Acho que esse programa está certo.Mas esse programa roda melhor no Dev-C++ do Windows.

Porque esse programa não mostra o nome completo da pessoa,ou seja ele pula os caracteres no codeblocks,esse programa está certo?Quero que ele mostre o nome completo da pessoa ou conte apenas os 10 caracteres iniciais,como faço isso?

Veja o programa no Codeblocks:

Strings em C devem ter um espaço adicional para o terminador de string. Então se quer que tenha até 10 caracteres, a string deve ter 11 espaços:

char s[11];

Além disso, o problema na verdade está no primeiro scanf, pois se vc digitar mais do que cabe na string, ele “deixa” e pode acontecer qualquer coisa (desde “funcionar” até dar algum erro em tempo de execução).

Ou seja, assim funciona:

char s[11];
printf("Digite algo:\n");
scanf("%10[^\n]s", s);

Desta forma, ele limita a no máximo 10 caracteres, e s tem o espaço adicional para o terminador.


Complementando, fflush(stdin) não é portável, ou seja, não é garantido que funcione em todos os ambientes. Saiba mais lendo aqui.

Por fim, existem alternativas melhores do que scanf, ver aqui, aqui e aqui.

— Supostamente…, sim, esse programa aparentemente não tem erros!
Talvez ainda não é obvio, porque pulaste ou não leste completamente uma, ou outra definição da função scanf no guia da linguagem de programação c.

E daí?
— Então, uma das consequências de não ler completamente a definição de uma função é observar esse fenômeno; uma falha da lógica: espera pela saída, mas ela não acontece.

*** Sugiro que repita a leitura no guia da linguagem de programação c até o entendimento de cada especificador, ou pelo menos os escritos no código-fonte daquela imagem.

MB