Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

213
Visualizações
strlen no da la longitud de cadena correcta C

Estoy leyendo de mi diccionario e imprimiendo la palabra + la longitud de la palabra para fines de prueba.

Uso strlen para obtener la longitud de la cadena. Sin embargo, los números que obtuve no son correctos. Creo que strlen no cuenta el carácter \0.

Estoy leyendo las primeras 10 palabras del diccionario. Mi salida esperada debería ser:

 W:AL:1 W:A's L:3 W:AA's L:4 W:AB's L:4 W:ABM's L:5 W:AC's L:4 W:ACTH's L:6 W:AI's L:3 W:AIDS's L:6 W:AM's L:4

Pero esto es lo que obtuve (Observe cómo las L: están en otra línea. Creo que aquí es donde está el problema):

 W:A L:2 W:A's L:4 W:AA's L:5 W:AB's L:5 W:ABM's L:6 W:AC's L:5 W:ACTH's L:7 W:AI's L:5 W:AIDS's L:7 W:AM's L:5

A continuación se muestra mi código:

 FILE* dict = fopen("/usr/share/dict/words", "r"); //open the dictionary for read-only access if(dict == NULL) { return; } int i; i = 0; // Read each line of the file, and insert the word in hash table char word[128]; while(i < 10 && fgets(word, sizeof(word), dict) != NULL) { printf("W:%s L:%d\n", word, (int)strlen(word)); i++; }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

fgets() lee la nueva línea en el búfer si hay suficiente espacio. Como resultado, verá la nueva línea impresa cuando imprima word . Del manual de fgets:

fgets() lee como máximo un carácter inferior al tamaño de la secuencia y los almacena en el búfer al que apunta s. La lectura se detiene después de un EOF o una nueva línea. Si se lee una nueva línea, se almacena en el búfer. Un byte nulo de terminación ('\0') se almacena después del último carácter en el búfer.

(énfasis mío)

Tienes que recortarlo tú mismo:

 while(i < 10 && fgets(word, sizeof(word), dict) != NULL) { size_t len = strlen(word); if ( len > 0 && word[len-1] == '\n' ) word[len] = '\0'; printf("W:%s L:%d\n", word, (int)strlen(word)); i++; }
over 4 years ago · Santiago Trujillo Relatório

0

La razón es porque fgets extrae el carácter de nueva línea '\n' en su word de búfer cada vez, lo que lleva a un conteo mayor en 1 cada vez.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda