Ir ao conteúdo
  • Cadastre-se

Argumentos passados por linhas de comando C++


Ir à solução Resolvido por LNW,

Posts recomendados

Olá, tudo bem?

 

Estou a seguinte dificuldade:

 

Preciso abrir um arquivo que é passado como parametro pelas linhas de comando. Se o nome do arquivo possuir mais de uma palavra, como eu faço para transformar em uma única variavel do tipo char? Eu tentei transformar as palavras em uma string só que o ifstream não aceita uma string.

 

int cont; 
string nomeArquivo
for(cont=1; cont < argc; cont++)  {
nomeArquivo=nomeArquivo+ " " + argv[cont];  
}
 
ifstream texto (nomeArquivo);//erro, tentando mandar como parametro uma string mas só aceita char
 
 
Obrigada desde já!
Link para o comentário
Compartilhar em outros sites

@Ester Evelyn Domingues

 

 

Basta passar esse arquivo entre aspas:

 

$ prog.exe "meu arquivo.txt"

 

 

Depois que nomeArquivo contiver a string, você chamaria:

nomeArquivo = "\"" + nomeArquivo + "\"";ifstream texto (nomeArquivo.c_str());

Edit: Se compilar para o novo padrão C++11, ele aceitará uma string no argumento..

 

 

LNW

Link para o comentário
Compartilhar em outros sites

Olá, bom dia. O problema é que nao sou eu que vou passar por linha de comando e sim o prof. Não sei se ele vai passar o nome entre aspas... Não tem  outro jeito?

 

@Ester Evelyn Domingues

 

 

Basta passar esse arquivo entre aspas:

 

$ prog.exe "meu arquivo.txt"

 

 

Depois que nomeArquivo contiver a string, você chamaria:

nomeArquivo = "\"" + nomeArquivo + "\"";ifstream texto (nomeArquivo.c_str());

Edit: Se compilar para o novo padrão C++11, ele aceitará uma string no argumento..

 

 

LNW


@Ester Evelyn Domingues

 

 

Basta passar esse arquivo entre aspas:

 

$ prog.exe "meu arquivo.txt"

 

 

Depois que nomeArquivo contiver a string, você chamaria:

nomeArquivo = "\"" + nomeArquivo + "\"";ifstream texto (nomeArquivo.c_str());

Edit: Se compilar para o novo padrão C++11, ele aceitará uma string no argumento..

 

 

LNW

 

E eu usei isso no devc++ e nao esta aceitando...

Link para o comentário
Compartilhar em outros sites

  • Solução

Olá @Ester Evelyn Domingues

 

 

Olá, bom dia. O problema é que nao sou eu que vou passar por linha de comando e sim o prof. Não sei se ele vai passar o nome entre aspas... Não tem  outro jeito?

 

E eu usei isso no devc++ e nao esta aceitando...

 

 

Com relação a essa questão do nome de arquivo com espaços, não vejo outra saída senão realmente passá-lo entre aspas (ou poderia escapar os espaços, no bash). Suponha que você realmente considere que cada parte passada venha a compor o nome de um arquivo "exemplo de arquivo.txt". Ex:

 

$ prog.exe exemplo de arquivo.txt

 

Até daria para concatenar os argumentos (exemplo, de, arquivo.txt) adicionando um espaço entre eles. O problema é: e se o nome de arquivo contiver mais de um espaço? E se for indicado um path também com mais de um espaço seguido no nome? Não seria uma boa solução tentar fazer essa gambiarra.. (na minha humilde opinião). No Windows, por exemplo, quando você arrasta um arquivo e solta sobre um programa/script, todo o path mais o nome de arquivo entre aspas é passado como argumento.

 

 

Sobre o Dev-C++, teria que postar mais detalhes sobre o que deu errado. Não ficou claro pra mim onde foi o erro (e qual foi)...

 

 

 

Um abraço,

 

LNW

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!