Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

128
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!