C4477: la cadena de formato ‘% s’ requiere el tipo ‘char *’, pero el argumento variadic 1 tiene el tipo ‘int’

He estado siguiendo los foros durante más de un mes y tiene respuestas a la mayoría de mis preguntas. Pero he estado luchando por una dificultad que realmente no pude encontrar la respuesta por aquí (hay otras soluciones similares, pero no resolví la mía)

He intentado simplificar mi enorme bloque de código al que se muestra a continuación,

#define DATA_ROW 1 /*I have one data per line*/ int freqstring; char objectstring; char string[10]; FILE * file; freqstring = 0; while (fscanf_s(file, "%s", &objectstring, 8) == DATA_ROW) { string[freqstring] = objectstring; freqstring = freqstring + 1; } for (freqstring = 0; freqstring < 10; freqstring = freqstring + 1) { printf("%s", string[freqstring]); } 

Comencé a aprender progtwigción en C durante más de 2 meses, y esta es la primera vez que uso arreglos. Y he encontrado el siguiente mensaje de error en el cuadro de salida

advertencia C4477: ‘printf’: la cadena de formato ‘% s’ requiere un argumento de tipo ‘char *’, pero el argumento variadic 1 tiene el tipo ‘int’

Tienes algún malentendido del concepto de cadena.

Una cadena es una matriz de caracteres terminada en cero. El carácter individual en esa cadena aún es de tipo entero.

Entonces, la string[freqstring] tiene un tipo entero. Y eso es exactamente lo que dice el mensaje de error. El printf espera un tipo char* (también conocido como cadena) debido al uso de %s pero le da un tipo entero.

Para obtener la cadena, solo usa la string , es decir

 printf("%s\n", string); 

Además, parece que tienes problemas con el escaneo:

 fscanf_s(file, "%s", &objectstring, 8) 

Solicita una cadena ( %s ), pero la objectstring es solo un solo char . Usted afirma que el tamaño es 8, que no lo es. Use sizeof lugar de una constante.

¿Realmente pretendías leer los caracteres y luego usar %c lugar de %s ?

En caso de que quieras leer caracteres , el código podría ser algo como:

 freqstring = 0; string[freqstring] = '\0'; while ((fscanf_s(file, "%c", &objectstring, sizeof(char)) == 1) && (freqstring < 9)) { string[freqstring] = objectstring; freqstring = freqstring + 1; string[freqstring] = '\0'; } printf("%s\n", string);