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

84
Visualizações
Almacene strtok en una matriz ~ C

Me dieron la función parseInput de un maestro. No puedo hacerlo funcionar sin una falla de segmentación y espero que me puedan ayudar.

Creo que tiene que ver con cómo paso total_cmd_words , pero no estoy seguro.

 // Libraries #include <stdio.h> #include <string.h> int parseInput(char *input, char* splitWords[]){ int wordInd = 0; splitWords[0] = strtok(input, " "); // VSCODE says this line is causing the fault while(splitWords[wordInd] != NULL){ splitWords[++wordInd] = strtok(NULL, " "); } return wordInd; } int main(){ char* total_cmd = "file1 > file2"; char* total_cmd_words[] = {}; parseInput(total_cmd, total_cmd_words); }

gdb da esta salida:

 __GI___strtok_r (s=0x555555556006 "file1 > file2", delim=0x555555556004 " ", save_ptr=0x7ffff7fb0ca8 <olds>) at strtok_r.c:72 72 strtok_r.c: No such file or directory.

Cambiando: char* total_cmd_words[] = {}; a esto: char* total_cmd_words[100] = {}; Todavía resulta en una falla de segmentación.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Hay dos errores en su función main .

Primero, su declaración de total_cmd_words es incorrecta: tal como está, está declarando una matriz de longitud cero, por lo que no hay espacio para almacenar los puntos devueltos por la strtok en su función parseInput . Debe especificar una dimensión para la matriz dentro de [] , una que sea lo suficientemente grande como para contener la cantidad máxima de valores que es probable que encuentre.

En segundo lugar, una llamada a strtok modifica la cadena dada como su primer argumento . Sin embargo, su total_cmd es un puntero a un literal de cadena no mutable . En su lugar, declare eso como una matriz de char e inicialícelo con una copia del literal de cadena.

Aquí hay una posible versión de trabajo de su main :

 int main() { char total_cmd[] = "file1 > file2"; char* total_cmd_words[10] = {0,}; int p = parseInput(total_cmd, total_cmd_words); printf("%d\n", p); }
over 4 years ago · Santiago Trujillo Relatório

0

cuando declaraste

 char* total_cmd_words[] = {};

no especificó una longitud de matriz. Por lo tanto, su longitud fue determinada por su inicializador que estaba vacío.

Entonces, cuando lo hagas

 splitWords[0] = strtok(input, " ");

está asignando al primer elemento de una matriz de longitud 0. Ese es un comportamiento indefinido y la causa más probable de su falla de segmentación.

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