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

190
Vistas
¿Por qué necesitamos verificar la longitud de la cadena mayor que 0?

Obtuve este ejemplo de CS50. Sé que debemos verificar "s == NULL" en caso de que no haya memoria en la RAM. Pero no estoy seguro de por qué necesitamos verificar la longitud de la cadena de t antes de capitalizar.

 #include <cs50.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { // Get a string char *s = get_string("s: "); if (s == NULL) { return 1; } // Allocate memory for another string char *t = malloc(strlen(s) + 1); if (t == NULL) { return 1; } // Copy string into memory strcpy(t, s); // Why do we need to check this condition? if (strlen(t) > 0) { t[0] = toupper(t[0]); } // Print strings printf("s: %s\n", s); printf("t: %s\n", t); // Free memory free(t); return 0; }

¿Por qué necesitamos usar "if (strlen(t) > 0)" antes de capitalizar?

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

0

Conceptualmente, no hay ningún carácter en mayúsculas cuando la cadena está vacía.

Técnicamente, no es necesario. El primer carácter de una cadena vacía es 0 y toupper(0) es 0 .


Tenga en cuenta que strlen(t) > 0 también se puede escribir como t[0] != 0 o simplemente t[0] . No hay necesidad de calcular realmente la longitud de la cadena para averiguar si es una cadena vacía.

Además, asegúrese de leer la respuesta de chux para obtener una corrección con respecto al char firmado.

over 4 years ago · Santiago Trujillo Denunciar

0

// Why do we need to check this condition?

No hay necesidad de cheque. Una cadena de longitud 0 consta únicamente de un carácter nulo y toupper('\0'); devuelve '\0' .


Avanzado : Sin embargo, se necesita algo más.

char puede actuar como un char firmado o sin firmar . Si t[0] < 0 , (quizás debido a la introducción de 'é'), entonces toupper(negative) es un comportamiento indefinido (UB). toupper() solo está definido para EOF (algunos negativos) y valores en el rango de unsigned char .

Un cambio de código más valioso, aunque pedante, sería acceder a los caracteres como si fueran unsigned char y luego llamar a toupper() .

 // if (strlen(t) > 0) { t[0] = toupper(t[0]); } t[0] = (char) toupper(((unsigned char*)t)[0]); // or t[0] = (char) toupper(*(unsigned char*)t));
over 4 years ago · Santiago Trujillo Denunciar

0

Para cualquier cadena t , los índices válidos ( de los caracteres reales de la cadena ) serán de 0 a strlen(t) - 1 .

Usar strlen(t) como índice será el índice del terminador nulo (asumiendo que es una cadena terminada en nulo "adecuada").

Si strlen(t) == 0 , entonces t[0] será el terminador nulo. Y hacer toupper en el terminador nulo no tiene sentido. Esto es lo que hace la verificación, asegúrese de que haya al menos un carácter real (más allá del terminador nulo) en la cadena.

En otras palabras: comprueba que la cadena no esté vacía.

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