Enviado em 10/05/2020 - 13:20h
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!while(*pA != '\0') // Repete o while até encontrar em pA o fim de string *pB++ = *pA++; // pB recebe pA e se Incrementam *pB = '\0';
char *Nome = "Nick";
*pB++ = *pA++;
// 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! //while(getline(&Line_Content, &Line_Size, MyFile) > 0) for(int Current_Line = 1 ;getline(&Line_Content, &Line_Size, MyFile) > 0; Current_Line++) { if(Current_Line == 3) { // > 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'; } if(*Line_Content == 3) { // ETX *Add_Groups++ = '\n'; *Add_Groups = '\0'; break; } } break; } } fclose(MyFile); free(Line_Content); EdGroups->SetValue(Add_Groups); //ChGroup->Append("> Add/Remove/Edit"); free(Add_Groups);
*Add_Groups++ = *Line_Content++;
gcc Test.c -o Test -O3 -Wall -pedantic -pedantic-errors -Werror g++ Test.cpp -o Test `wx-config --libs --cxxflags` -O3 -Wall -pedantic -pedantic-errors -Werror
Enviado em 11/05/2020 - 03:41h
Começando pelo fim.while(*pA != '\0') // Repete o while até encontrar em pA o fim de string *pB++ = *pA++; // pB recebe pA e se Incrementam *pB = '\0';
char *Nome = "Nick";
const char *pA="Nick"; // OK: array com 5 elementos do tipo const char decai para ponteiro para const char, e é atribuído a variável do mesmo tipo.
*pB++ = *pA++;
// 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!
//while(getline(&Line_Content, &Line_Size, MyFile) > 0) for(int Current_Line = 1 ;getline(&Line_Content, &Line_Size, MyFile) > 0; Current_Line++) { if(Current_Line == 3) { // > 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
for(char *pCont=Line_Content, *pGroups=Add_Groups; *pCont; ++pCont++, ++pGroups)
} else { *Add_Groups++ = '\n'; } if(*Line_Content == 3) { // ETX *Add_Groups++ = '\n'; *Add_Groups = '\0'; break; } } break; } } fclose(MyFile); free(Line_Content);
EdGroups->SetValue(Add_Groups); //ChGroup->Append("> Add/Remove/Edit"); free(Add_Groups);
// No ínicio do arquivo #include <fstream> #include <string> // Na sua função. std::ifstream MyFile(Path); std::string LineContent, AddGroups; unsigned lineNumber=0u; while(getline(MyFile, LineContent)){ if(++lineNumber==3){ for(char c: LineContent) switch(c){ // Uso switch em vez da tripa de ifs porque tende a gerar código mais eficiente, especialmente para um conjunto pequeno de valores possíveis. default: AddGroup+=c; break; // Esse break é do switch, não do for; para sair de loops dentro de um switch tem-se de usar goto. case '\3': // ETX AddGroups+=c; AddGroups+='\n'; // Note o fall-through: aproveita o goto que está abaixo. case '\0': // Supõe que o terminador de strings do C termina a string no arquivo. Isso não necessariamente é verdade para strings do C++, que podem conter nulos sem problemas (desde que não sejam convertidas de/para strings do C). goto end_copy; case '\37': // US (037 é a expressão em base octal do valor 31 em base decimal). AddGroups+='\n'; // Fall-through: aproveita o break que está abaixo. case '\2': // STX: não faz nada (no seu programa também não fazia). break; } end_copy: break; // Sai do while. } } EdGroups->SetValue(AddGroups);
*Add_Groups++ = *Line_Content++;
gcc Test.c -o Test -O3 -Wall -pedantic -pedantic-errors -Werror g++ Test.cpp -o Test `wx-config --libs --cxxflags` -O3 -Wall -pedantic -pedantic-errors -Werror
Enviado em 10/05/2020 - 13:54h
Para terem uma idéia do quanto é difícil aprender com tanto material na internet que não funciona! Olha esse site e seu exemplo:Test.cpp: In function ‘int main()’: Test.cpp:9:4: error: ‘strcpy’ was not declared in this scope 9 | strcpy(frase,"Tipos de dados"); // copia "Tipos de dados" para frase. | ^~~~~~ Test.cpp:3:1: note: ‘strcpy’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’? 2 | #include <iostream> +++ |+#include <cstring> 3 | using namespace std; Test.cpp:12:13: error: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings] 12 | frase1 = "Curso de C++";
Enviado em 10/05/2020 - 13:59h
Enviado em 10/05/2020 - 14:14h
Quando joguei seu código no VIM você não declarou algumas variaveis não declaradas, vou tentar ajudar sobre oque entendiwhile(*pA != '\0') // Repete o while até encontrar em pA o fim de string *pB++ = *pA++; // pB recebe pA e se Incrementam *pB = '\0';
int main() { std::string myString = "Hello, there!"; std::string myOtherString = myString; //Makes a copy of myString }
Enviado em 10/05/2020 - 14:16h
Enviado em 10/05/2020 - 14:44h
*Add_Groups++ = *Line_Content++;
char *Add_Groups = new char[Line_Size];
while(*pA != '\0') // Repete o while até encontrar em pA o fim de string *pB++ = *pA++; // pB recebe pA e se Incrementam *pB = '\0';
getline(&Line_Content, &Line_Size, MyFile) > 0
int main() { std::string myString = "Hello, there!"; std::string myOtherString = myString; //Makes a copy of myString }
Enviado em 10/05/2020 - 14:59h
Acrescentando mais informação.char *pA = "Pensem aqui em uma Linha com 10 mil caracteres" char *pB; while(*pA != '\0') // Repete o while até encontrar em pA o fim de string *pB++ = *pA++; // pB recebe pA e se Incrementam
*pB++ = *pA++; // pB recebe pA e se Incrementam
*Add_Groups++ = *Line_Content++; // Isso não está funcionando!
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
Enviado em 10/05/2020 - 21:48h
Enviado em 10/05/2020 - 22:08h
char *pA = "Pensem aqui em uma Linha com 10 mil caracteres" char *pB; while(*pA != '\0') // Repete o while até encontrar em pA o fim de string *pB++ = *pA++; // pB recebe pA e se Incrementam
*pB++ = *pA++; // pB recebe pA e se Incrementam
*Add_Groups++ = *Line_Content++; // Isso não está funcionando!
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
*Line_Content++; strcpy(*Add_Groups, *Line_Content); *Add_Groups++;
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalando o Pi-Hole versão v5.18.4 depois do lançamento da versão v6.0
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)