citadp Posted March 25, 2013 at 11:44 AM Report #500279 Posted March 25, 2013 at 11:44 AM (edited) OLá, estou a tentar fazer um programa que leia do teclado alguns comandos. Mas quando ele chega à função stcmp para ver se foi aquele comando que o utilizador meteu, ele dá segmentation fault , já fiz print's antes e depois dessa linha , e as antes ele imprime, mas depois não. printf("Introduza a operacao pretendida:\n"); char input[MAX_LINE]; fgets(input,MAX_LINE, stdin); aux = strtok( input, " "); printf("tamos antes do copiar\n"); if ( strcmp ( aux, "copiar\n" ) == 0 ) { printf("tamos depois do copiar\n"); Depois da linha if ( strcmp ( aux, "copiar\n" ) == 0 ){ ele já não imprime o printf e dá segmentation fault Edited March 25, 2013 at 12:05 PM by pmg Flata LP no GeSHi
pmg Posted March 25, 2013 at 11:53 AM Report #500281 Posted March 25, 2013 at 11:53 AM Se eu interpreto bem o teu programa, principalmente a razão do strtok() -- o utilizador escreve qualquer coisa como "copiar ficheiro pasta<ENTER>"; e não "copiar<ENTER>" -- a condição no if não é verdade. O teu programa não imprime o "tamos depois do copiar\n" porque não passa nessa parte do código. Qual é o efeito que pretendes com o strtok()? Qual é o resto do código? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
pmg Posted March 25, 2013 at 12:30 PM Report #500284 Posted March 25, 2013 at 12:30 PM Alem disso, definiste aux como char. Depois atribuis-lhe o valor devolvido pela função strtok() que é de tipo char*. Com os warnings do compilador ligados, ele avisava-te que não podes fazer isto! Mais tarde passas aux como argumento à função strcmp(). Mais uma vez, não podes passar um char em vez dum char*. Liga os warnings do teu compilador e não corras o programa antes de limpares todos os warnings What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
citadp Posted March 25, 2013 at 01:26 PM Author Report #500286 Posted March 25, 2013 at 01:26 PM Pois, se calhar não tenho warning's ligados, porque não me aparece nada.!! Vou experimentar!
citadp Posted March 25, 2013 at 01:48 PM Author Report #500290 Posted March 25, 2013 at 01:48 PM (edited) Ao meter o apontador char *aux; Ele dá warning! Por isso é que sem o apontador ele fazia, mas dava segmentation! int status; int sair=0; pid_t a; char *funcao; while(sair!=1) { printf("Introduza a operacao pretendida:\n"); char input[MAX_LINE]; fgets(input,MAX_LINE, stdin); funcao = strtok ( input, " " ); printf("tamos antes do copiar\n"); */ /* ************copiar****************** */ if ( strcmp ( &funcao, "copiar\n" ) == 0 ) { printf("entramos no copiar\n"); a = fork(); if(a == -1){ perror("Erro ao criar filho "); exit(1); } (...) agr apresenta este erro: so.c:37:10: warning: assignment makes pointer from integer without a cast [enabled by default] em que a linha 37 é funcao = strtok ( input, " " ); Edited March 25, 2013 at 03:21 PM by pmg Falta LP no GeSHi
pmg Posted March 25, 2013 at 02:27 PM Report #500294 Posted March 25, 2013 at 02:27 PM apresenta este erro: so.c:37:10: warning: assignment makes pointer from integer without a cast [enabled by default] Experimenta incluir o header que tem a declaração da função strtok() #include <string.h> What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
citadp Posted March 25, 2013 at 03:01 PM Author Report #500299 Posted March 25, 2013 at 03:01 PM Consegui! Muito obrigada! Não me tava mesmo a ocorrer as bibliotecas 😄
pmg Posted March 25, 2013 at 03:14 PM Report #500301 Posted March 25, 2013 at 03:14 PM Consegui! Muito obrigada! Não me tava mesmo a ocorrer as bibliotecas 😄 Hmmm ... deixa-me explicar: O warning "assignment makes pointer from integer without a cast" na linha funcao = strtok ( input, " " ); quando tanto funcao como input são do tipo correcto só quer dizer que o warning vem de outro objecto presente nessa linha. Qual objecto? Tirando o literal " " não está lá mais nada. Ah! Mas está. Está lá o valor devolvido pela função. Pois, mas esse valor é, obviamente, do tipo correcto. O problema é que o compilador não sabe qual é esse tipo: ninguém lhe disse. Então o compilador assume que a função devolve um int. Ao tentar atribui esse valor (de tipo int) à variável função (de tipo char*) dá o warning. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now