Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

131
Vistas
En C, ¿cuándo puede devolver `fputc` que no sea su primer argumento?

El estándar C17 (N2176) establece: "La función fputc devuelve el carácter escrito" (7.21.7.3) si no hay error de escritura.

Pero en el contexto de

 int c ; // ... later, c is assigned an "interesting" value ... int k = fputc ( c , stdout ) ;

es

 k == c || k == EOF

siempre true ? Es decir, siempre que fputc no devuelva EOF , ¿está garantizado que devolverá c ? Dicho de una tercera manera, ¿ fputc puede escribir un carácter diferente a uno igual a su primer argumento?

Por ejemplo, si solicito la salida del signo de dólar (no se garantiza que esté en los juegos de caracteres fuente o de ejecución, AFAICT), podría '\u0024' != fputc('\u0024', stdout) . Tal vez el programa genere un símbolo de moneda local, en su lugar.

Aclaración

La pregunta es

En C, ¿cuándo puede fputc devolver algo que no sea su primer argumento?

Las respuestas parciales hasta ahora (2021-10-20) parecen ser:

  • cuando ocurre un error de escritura durante fputc ,
  • cuando (unsigned char) c != c

todavía me pregunto

Supongamos que (unsigned char) c == c , pero (unsigned char) c no coincide con un carácter en el conjunto de caracteres de ejecución. ¿Se le permite a fputc escribir algún otro carácter en su lugar?

Por ejemplo , suponga que c == (unsigned char) '\u0024' (signo de dólar ASCII) no existe en el conjunto de caracteres de ejecución (porque el conjunto de caracteres de ejecución no es ASCII). ¿Puede fputc escribir, por ejemplo, otro símbolo de moneda en su lugar (o algún carácter arbitrario)?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

es k == c || k == EOF siempre es cierto?

Normalmente sí, pero no.

Con fputc ( c , stdout ) , c se convierte en un unsigned char y eso se escribe. Es ese valor o EOF que se devuelve.

En su lugar, espere k == (unsigned char) c || k == EOF .

La función fputc escribe el carácter especificado por c (convertido en un unsigned char ) en el flujo de salida...
Devoluciones: La función fputc devuelve el carácter escrito. Si ocurre un error de escritura, se establece el indicador de error para la secuencia y fputc devuelve EOF . C17dr § 7.21.7.3 2-3


Un ejemplo algo no tan raro es cuando ch se asigna desde un char que está firmado y con un valor inferior a 0. Se espera que el valor de retorno de la función sea [0...UCHAR_MAX] o EOF .

Ejemplo

 char ch = -96; printf("%d %d %d\n", SCHAR_MIN, ch, fputc(ch, stdout));

Producción

 �-128 -96 160

Tal vez el programa genere un símbolo de moneda local, en su lugar.

Con fputc('\u0024', stdout) , igual que fputc(0x24, stdout) y fputc(36, stdout) , el símbolo que se ve es específico de la implementación. C no especifica que se use ASCII, incluso si es omnipresente. C no especifica la fuente ni las formas de las representaciones de caracteres. Aún así, probablemente será $ .

over 4 years ago · Santiago Trujillo Denunciar

0

Sí, fputc siempre devuelve EOF o el carácter escrito.

Según la página de cppreference.com en fputc :

Valor de retorno
En caso de éxito, devuelve el carácter escrito.
En caso de falla, devuelve EOF y establece el indicador de error (ver ferror() ) en la transmisión.

Y del estándar C17 (7.21.7.3/2-3, N2310 ):

  1. Descripción
    La función fputc escribe el carácter especificado por c (convertido en un unsigned char ) en el flujo de salida al que apunta flujo...

  2. Devoluciones
    La función fputc devuelve el carácter escrito. Si ocurre un error de escritura, se establece el indicador de error para la secuencia y fputc devuelve EOF .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda