Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DouglasP

[Resolvido] codigo

Recommended Posts

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

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

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

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

#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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.