Eu estou usando uma apostila, e nela está dizendo que toda String é uma matriz, e que toda matriz pode ser representada por um ponteiro. Mas por exemplo, argcv, é uma matriz de Strings, portanto uma matriz bidimensional. Mas na apostila está escrito assim: “char *argcv[]”. Então argcv seria uma matriz de ponteiros?Como eu utilizo ponteiros para matrizes bidimensionais? E outra coisa, quando você usa uma string, é reservada uma área na memória, e um ponteiro para o primeiro byte, e o último byte é preenchido com um nulo, certo? Então como eu posso ter certeza de que uma outra variável não vai ocupar o espaço de minha String?
Eu sei que são muitas perguntas, mas eu estou iniciando em C e C++, e me surgiram muitas dúvidas, pois não consegui achar um bom material. Se algum de vocês conhecerem uma boa apostila, ou livro, ou qualquer meio didático, por favor me falem.
Tem algum código para que possamos ajudar?
Não tenho nada concreto, nem estou trabalhando em nada. É apenas uma dúvida por fins didáticos. Mas por exemplo:
void main(int argc, char *argv){
if(argc >2){
printf(%s, argv[1])
}
}
Eu vi em muitos lugares escrito assim: char *argv []
, mas a minha dúvida é:
- se
argv
é uma matriz de strings, então ela é uma matriz de matrizes, certo? Ou seja, cada ponteiro aponta para uma matriz?? - Ah, e como coloca o código naquelas janelinhas cinzas?
Os parâmetros argc e argv dão ao programador acesso à linha de comando com a qual o programa foi chamado.
O argc
(argument count) é um inteiro e possui o número de argumentos com os quais a função main()
foi chamada na linha de comando.
O argv
(argument values) é um vetor de strings. Cada string deste vetor é um dos parâmetros da linha de comando. É para saber quantos elementos temos em argv que temos argc
.
Direitos reservados ao link: Os Argumentos argc e argv (univasf.edu.br)
Exemplo de Código:
#include <stdio.h>
int main(int argc, char *argv[])
{
int mes;
char *nomemes [] = {"Janeiro", "Fevereiro", "Março",
"Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro",
"Outubro", "Novembro", "Dezembro"};
if(argc == 4)
{
mes = atoi(argv[2]);
if (mes<1 || mes>12)
printf("Erro!\nMes invalido!");
else
printf("\n%s de %s de 20%s", argv[1],
nomemes[mes- 1], argv[3]);
}
else
printf("Erro!\nUso: data dia mes ano, todos inteiros");
}
Entrada:
data 19 04 06
Resultado:
19 de abril de 2006
argv é uma matriz de Strings (ou vetor de strings) em que cada posição é definida por não haver um espaço, e a cadeia de strings no caso da entrada acima por exemplo:
data => vetor[0]
19 => vetor[1]
04 => vetor[2]
06 => vetor[3]
Então, é somente um vetor de strings aonde cada posição tem uma cadeia sem espaço de texto.
Direitos reservados ao link: Os Argumentos argc e argv (univasf.edu.br)
Para inserir o código texto aqui no forum faça o seguinte
Alinha tudo para a esquerda e clique aonde está apontando na flecha logo abaixo na figura:
Muitíssimo obrigado! Entendi perfeitamente! É uma matriz de ponteiros, onde cada ponteiro aponta para o primeiro caractere de cada String, certo? Uma última pergunta, você conhece algum curso, apostila ou livro bom de de C++?
Não,
Ele não aponta para o primeiro somente, ele faz a diferença pelo espaço, leia novamente a apostila que eu te passei. data
por exemplo pertence a posição
0 do vetor argv
e assim por diante.
Não sei realmente, porque, não é minha linguagem afim, acho que no site de busca você vai conseguir mais fácil, igual eu mesmo peguei de uma faculdade.
Ah, eu não tinha percebido que era uma apostila. Muito obrigado! Com certeza, utilizarei os links dessa faculdade!
Apenas acrescentando à resposta do colega Dragoon,
Recentemente um colega enviou um link para mim, perguntando se o caminho a seguir citado no o site contido no link era válido para aprender C++, e achei muito bom o conteúdo e acredito que ajude.
Não menosprezando o link do colega sobre argc e argv sendo de grande valor para iniciantes, vou deixar o link que recebi recentemente.
Roadmap C++ do colega Vinícius Godoy de Mendonça
Acredito que irá acrescentar.
Muitíssimo obrigado! Entendi perfeitamente! É uma matriz de ponteiros, onde cada ponteiro aponta para o primeiro caractere de cada String, certo? Uma última pergunta, você conhece algum curso, apostila ou livro bom de de C++?
Sobre um livro sobre C++ cara, eu estou lendo um que chama “Começando a programa em C++ para Leigos”. Eu não sei se você está atrás de algo que seja para leigos mas achei que seria válido te falar desse livro mesmo assim.
Eu comprei ele nesta loja: https://www.amazon.com.br/Começando-Programar-Em-Para-Leigos/dp/8576085992/ref=sr_1_1?ie=UTF8&qid=1469319949&sr=8-1&keywords=C%2B%2B+LEIGOS
Obrigado a todos!