¿Qué está mal con este simple código?

Sé que esto podría ser un simple error, sin embargo, todavía no puedo entender el error. estoy obteniendo

la dirección del puntero en lugar del valor cuando imprimo un número entero.

#include int main(){ char s1[100]; int words,lines,chara = 0; FILE * fp; fp = fopen("fox.txt","r"); if(fp==NULL){ printf("Can't open file"); } else{ while (fscanf(fp,"%s",s1) != EOF){ words++; // printf("%s",s1); } } printf("There are %d of words",words); } 

fox.txt

 The quick brown fox jumps over the lazy dog 

salida:

 There are 2665625 of words 

words no se inicializan, por lo que comienza a incrementar desde un valor indefinido.

 int words,lines,chara = 0; 

establece chara en 0 pero no inicializa las otras variables. Si quieres inicializar los 3, necesitarías

 int words = 0, lines = 0, chara = 0; 
 int words,lines,chara = 0; 

Esta línea declara 3 variables pero inicializa solo chara .

Más adelante en el ciclo, comienzas a incrementar las words pero aún no se ha inicializado. Tiene un valor indefinido.

Puedes corregirlo haciendo simplemente:

 int words = 0, lines = 0, chara = 0; 

Te perdiste inicializando words variable

int words =0;

La variable sin inicializar tendrá valor de basura.