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

369
Views
¿Cómo funciona "for ( ; *p; ++p) *p = tolower(*p);" trabajo en c?

Soy bastante nuevo en la programación y me preguntaba por qué este código:

 for ( ; *p; ++p) *p = tolower(*p);

funciona para reducir un caso de cadena en c, cuando p apunta a una cadena?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

En general, este código:

 for ( ; *p; ++p) *p = tolower(*p);

no

” funciona para bajar un caso de cadena en c, cuando p apunta a una cadena?

Funciona para ASCII puro, pero dado que char generalmente es un tipo con signo, y dado que tolower requiere un argumento no negativo (excepto el valor especial EOF ), la pieza en general tendrá un comportamiento indefinido.

Para evitar eso, envíe el argumento a unsigned char , así:

 for ( ; *p; ++p) *p = tolower( (unsigned char)*p );

Ahora puede funcionar para codificaciones de un solo byte como Latin-1, siempre que haya configurado la configuración regional correcta a través de setlocale , por ejemplo, setlocale( LC_ALL, "" ); . Sin embargo, tenga en cuenta que la codificación UTF-8 muy común no es un solo byte por carácter. Para tratar con texto UTF-8, puede convertirlo en una cadena ancha y en minúsculas.


Detalles:

  • *p es una expresión que denota el objeto al que apunta p , presumiblemente un char .

  • Como condición de continuación para el ciclo for , cualquier valor de char distinto de cero que denota *p , tiene el efecto de True lógico, mientras que el valor de char cero al final de la cadena tiene el efecto de False lógico, finalizando el ciclo.

  • ++p avanza el puntero para apuntar al siguiente char .

over 4 years ago · Santiago Trujillo Report

0

Para desmarcar, supongamos que p es un puntero a un char y justo antes del bucle for , apunta al primer carácter de una cadena.

En C, las cadenas generalmente se modelan mediante un conjunto de valores de caracteres char con un 0 final agregado al final que actúa como el terminador nulo .

*p se evaluará como 0 una vez que se alcance el terminador nulo de la cadena. Entonces el bucle for saldrá. (La segunda expresión en el bucle for actúa como prueba de terminación).

++p avanza al siguiente carácter de la cadena.

*p = tolower(*p) establece ese carácter en minúsculas.

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!