Neste momento fiquei mesmo desanimado! Eu ainda estou aprendendo C e falta um Mundo de coisas para eu entender! Acontece que estou fazendo um programinha usando a wxWidgets que é C++. E por mais que eu me esforce pra escrever em C tudo o que eu posso, começo a perceber que o compilador não me compreende e desconfio severamente que ele está tratando o meu código como C++ em todos os casos!
Montei um exemplo bonito de um ponteiro usando um vetor de char, salvei para que eu use como consulta, para usar qdo fosse precisar, então hoje qdo coloquei no meu código em C++ o compilador reclama me importuna e nem obedece as regras que eu havia com tanta dificuldade em aprender!
Aprendi com Paulo aqui no Fórum a compilar com TODOS os avisos ao máximo ligado, demorei pra entender isso, agora que entendi achei o máximo, venho resolvendo inúmeras reclamações do compilador e com dificuldades em cada uma delas, mas o compilador não tem nenhum respeito, parece uma perseguição!
CASO: O Exemplo abaixo aprendi na Internet, uma forma de passar valores de um ponteiro pro outro, e eu usaria isso para tratar a String recebida podendo modificá-la e etc... Isso abaixo funciona perfeitamente em C
while(*pA != '\0') // Repete o while até encontrar em pA o fim de string
*pB++ = *pA++; // pB recebe pA e se Incrementam
*pB = '\0';
Tentei fazer algo similar em C++ e o compilador tá estragando tudo! Ele não aceita uma simples declaração como:
char *Nome = "Nick";
Apanhei muito pra resolver isso, e o compilador não fica satisfeito! Eu preciso fazer isso funcionar
*pB++ = *pA++;
Mas não tenho a mínima idéia de como fazer isso! Gastei dias e nada! Abaixo vou mostrar o trecho do código em C++ que estou tentando fazer funcionar e explicarei porque! Ele já ficou uma ZONA de tanta coisa que comentei, modifiquei gerando muito mais confusão pra mim!
// FAZENDO ➤ Ler a Linha 3 do arquivo para EdGroups. Sendo que a cada Campo Lido preciso alimentar ChGroup (10/05/2020 12:05)
MyFile = fopen(Path, "r");
size_t Line_Size; // Posso também chutar um valor para Line_Size que seria o Tamanho da linha, pois getline calcula automaticamente pra mim se eu errar, aqui informei vazio né.
char *Line_Content;
// Tenho que varrer o arquivo até a linha, trabalhar na linha
// PENDENT ISSO parece completamete desnecessário, reativei novamente agora pra ter certeza! (10/05/2020 12:09)
// Conto a Qtd de Caracters da Linha 3 para poder declarar a variável que vai receber seu conteúdo
int Size = 0;
for(int Current_Line = 1 ;getline(&Line_Content, &Line_Size, MyFile) > 0; Current_Line++) {
if(Current_Line == 3) {
Line_Size = strlen(Line_Content) + 1; // Não sei porque mais declarar aqui int Size meio que não rolou por isso coloquei acima (10/05/2020 02:24)
break;
}
}
fclose(MyFile); // Preciso fechar o arquivo aqui pq o Código acima varre o arquivo
MyFile = fopen(Path, "r"); // PENDENT Reabro ele, talvez eu use aqui um rewind (10/05/2020 12:15)
// Line_Size aqui está com valor 23, porém minha Linha tem 21 Caracteres, mas eu aumentei 1 e esse outro 1 deve ser o Terminador (10/05/2020 12:11)
char *Add_Groups = new char[Line_Size]; // Acho que não funcionou bem o Line_Size ser declarado assim aqui nesta posição pq acredito que ele tenha ficado sem tamanho suficiente. E ainda tenho problema com ele pq abaixo ele muda totalmente de valor, é como se ele não recebe-se os valores, o que não sei pq ele não está recebendo valor.
//char *Add_Groups[101]; // Não funciona assim! Com o Outro acima! Testando pra saber se essa linha que está impedindo ele de receber valores!
// > Add/Remove/Edit
// varro o conteúdo da Linha mandando para outra variável o que enviarei para o TextCtrl
// ANOTAR que pegando o valor do ponteiro sem * ele pegou o valor inteiro, mas com * Apenas o valor sendo trabalhado no momento (10/05/2020 12:18)
//(gdb) p Line_Content ➤ $2 = 0xa5fd50 "\002 \037> Add/Remove/Edit\003\n"
//(gdb) p *Line_Content ➤ $3 = 2 '\002'
//while(*Line_Content != '\0')
for( ; *Line_Content != '\0'; Line_Content++)
if(*Line_Content != 2) { // STX
if(*Line_Content != 31) { // US
*Add_Groups++ = *Line_Content++; // Isso não está funcionando! Add_Groups recebe Line_Content e se incrementam
} else {
*Add_Groups++ = '\n';
Acima está uma Gigante ZONA de tanta modificações provisórias, mas a linha que eu esperava que funciona-se é. Isso COMPILA mas Add_Groups não recebe valor nenhum, ele MENTE pra mim fingindo que tudo está OK qdo não está, Eu entendi que essa linha abaixo receberia caracter por caracter e iria para a próxima posição do vetor/variável/caracter
*Add_Groups++ = *Line_Content++;
Sei que a culpa é do C++ mas nem sei compilar usando g++ pedindo a ele pra interpretar meu código como C pelo menos um pedaçinho do código. Estou compilando tanto em C, qto em C++ assim
Porém o código que informo acima não posso compilar em C, pois ele usa bibliotecas da wxWidgets que é toda em C++ como mostro acima a inclusão delas ao compilar
O Meu problema e o porque desse tipo de solução é que: Estou lendo a Linha 3 de um arquivo e não tenho como saber qts caracteres essa linha possue! Motivo que estou usando getlines para isso! Não quero tipo criar um char text[100000] O C me permite fazer text[TAM], mas C++ me proibiu cheio de regrinhas, e agora não aceita eu passar o valor do ponteiro pro outro!
Alguma idéia? Desculpe a pergunta de forma enrolada, despreparada, é que realmente estou muito chateado com esse incomodo! E se eu não consegui resolver terei que colocar uma solução provisória FEIA até no futuro eu entender melhor C++ suas Novas regras e ficará essa pendência pra ser resolvida!