DouglasP 1 Denunciar post Postado Setembro 18, 2010 Boa tarde, Alguem poderia me ajudar com esse codigo? #include <stdio.h> #include <tchar.h> #include <windows.h> #include <conio.h> #include <stdlib.h> int main(int argc, char* argv[]) { if (argv[1] != "pskey") { char stri[255]; sprintf(stri, "Execute o jogo pelo launcher %s", argv[1]); MessageBoxA(NULL,stri,"Informação",MB_OK); exit(0); } else { char stri[255]; sprintf(stri, "Executa o jogo %s", argv[1]); MessageBoxA(NULL,stri,"Informação",MB_OK); } system("pause"); } grato. Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Setembro 19, 2010 De que tipo é argv[1]? :) Só uma dica: vale a pena declarar char stri[255] tanto no if quanto no else? Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Setembro 19, 2010 A tipagem está correta, o que está mal é a comparação de strings... cof cof strcmp cof... Outro pequeno detalhe é que esse código cheira à segfault, você acessa a primeira posição de argv sem ter a certeza que ela existe. Btw, siga a dica dada pelo guidjos. Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Setembro 19, 2010 Eu perguntei qual o tipo de argv[1] pra que ele entendesse, justamente, com que tipo de dados está trabalhando. Claramente ele não interpretou corretamente o significado de argv[1] no código (isso é comum quando se começa a estudar C vindo de outras linguagens de mais alto nível, que possuem o tipo de dados string). A comparação no IF está errada justamente porque o tipo de argv[1] é char *. Você pode usar !=, ==, >, (...) para comparar argv[1], mas na maioria das vezes isso não é o que você quer. Com esses operadores, você compara o endereço de memória para o qual argv[1] aponta: #include <stdlib.h> #include <stdio.h> int main(int argc, char **argv) { if (!argv[1]) return 1; printf("%d", argv[1]); return 0; } A saída: C:\Users\guidjos\Desktop>teste abc 3484212 3484212, como já disse, é o endereço-base do array de caracteres apontado por &argv[1]. O resultado é sempre um número de sizeof(char *) bytes. Isso aqui deve te ajudar a entender como se trabalha com texto em C: #include <stdlib.h> #include <stdio.h> int main() { char *str = "Teste de \"string\""; int i; for (i = 0; i < strlen(str); i++) printf("\nEndereco: %d\nValor armazenado: %c\n", str + i, *(str + i)); return 0; } Rode o código. Eu escrevi *(str + i) para explicitar a diferença entre "endereço" e "valor armazenado no endereço". Se o tipo do vetor não fosse char, deveria ter sido feito *(str + i * sizeof str*) (porque o tamanho de cada elemento do vetor, e consequentemente, o número de bytes que devem ser pulados para acessar o próximo elemento, cresceria). "Strings" em C são nada mais que listas contínuas (vetores) de caracteres. Cada posição do vetor armazena um char (que tem tamanho definido como 1), e, por convenção, a "string" acaba na primeira posição do vetor (considerando a orientação do endereço-base para endereços maiores) que possuir 0 como valor NUMÉRICO (não o caracter 0). Enfim. Agora que você já deve ter entendido, pode tomar a solução dada e usar a strcmp(), que acessa caracter a caracter dos arrays passados como argumentos e retorna a diferença numérica (ascii) entre os dois vetores. Desnecessário dizer que, se strcmp() retorna 0, os dois vetores possuem caracteres iguais. Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Setembro 19, 2010 Tentei usar o strcmp, porem da erro na aplicação =/ #include <stdio.h> #include <tchar.h> #include <windows.h> #include <conio.h> #include <stdlib.h> int main(int argc, char* argv[]) { char stri[255]; if (strcmp(argv[1], "chave") == 0) { sprintf(stri, "Execute o jogo pelo launcher %s", argv[1]); MessageBoxA(NULL,stri,"Informação",MB_OK); exit(0); } if (strcmp(argv[1], "chave") == 1) { sprintf(stri, "Executa o jogo %s", argv[1]); MessageBoxA(NULL,stri,"Informação",MB_OK); } system("pause"); } Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Setembro 19, 2010 #include <stdlib.h> #include <stdio.h> int main(int argc, char **argv) { if (!argv[1]) return 1; char stri[255]; if (strcmp(argv[1], "pskey") == 0) { sprintf(stri, "Execute o jogo pelo launcher %s", argv[1]); } else { sprintf(stri, "Executa o jogo %s", argv[1]); } printf("%s\n", stri); return 0; } strcmp() retorna 1 apenas se a primeira string passada for "maior" que a segunda em 1 unidade. Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Setembro 19, 2010 resolvido, pode fechar. Compartilhar este post Link para o post Compartilhar em outros sites