Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
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.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");
}#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.resolvido, pode fechar.
De que tipo é argv[1]? :)
Só uma dica: vale a pena declarar char stri[255] tanto no if quanto no else?