Enviado em 12/08/2019 - 00:38h
Meu problema inicial começa quando percebi que não sei como identificar quantos registros tem em uma Struct.#include <stdio.h> struct DbNames { char Names[5]; }; int main() { char Text[] = "ABC"; struct DbNames List[] = { {"A"}, {"B"}, {"C"} }; /// ESTES 2 exemplos iniciais funcionam, eu consigo identificar o Caracter Terminador. if(Text[3] == 0) puts("OK 1"); // WORK if(Text[3] == '\0') puts("OK 2"); // WORK /// Porque aqui e nos exemplos abaixo eu não consigo identificar o Caracter Terminador? if(List[3].Names == 0) puts("OK 3"); // NO WORK | Because it does not work? /// PORQUE List[3].Names é um ponteiro? Como o gcc reclama abaixo? // if(List[3].Names == '\0') // Don't accept it | warning: comparison between pointer and zero character constant // puts("OK 4"); if(List[3].Names == "\0") puts("OK 5"); // if(List[3].Names == '0') // Don't accept it | warning: comparison between pointer and integer // puts("OK 6"); if(List[3].Names == NULL) puts("OK 7"); if(List[3].Names == "") puts("OK 8"); }
Enviado em 15/08/2019 - 03:04h
Prezado, boa noite.struct contato { char nome[50]; char endereco[60]; unsigned short cod_pais, cod_area; char telefone[15]; char email[70]; time_t data_nascimento; };
struct contato paulo1205={ "Paulo Pires", // atribuído ao campo nome "Rua Fulana, 25, ap. 101", // atribuído ao campo endereco 55, 21, // atribuídos aos campos cod_pais e cod_area "98765-4321", // atribuído ao campo telefone "paulo1205@provedor.com.br", // atribuído ao campo email 155456100 // atribuído ao campo data_nascimento };
strcpy(paulo1205.endereco, "Estrada das Cachoeiras, 3500");
size_t tamanho_nome=strlen(paulo1205.nome); assert(paulo1205.nome[len]=='\0'); struct tm *data_decomposta=localtime(paulo1205.data_nascimento); struct hostent *addr_mailhost=gethostbyname(strchr(paulo1205.email, '@')+1);
#include <stdio.h> struct DbNames { char Names[5];
}; int main() { char Text[] = "ABC"; struct DbNames List[] = { {"A"}, {"B"}, {"C"} }; /// ESTES 2 exemplos iniciais funcionam, eu consigo identificar o Caracter Terminador. if(Text[3] == 0) puts("OK 1"); // WORK if(Text[3] == '\0') puts("OK 2"); // WORK
/// Porque aqui e nos exemplos abaixo eu não consigo identificar o Caracter Terminador? if(List[3].Names == 0) puts("OK 3"); // NO WORK | Because it does not work?
/// PORQUE List[3].Names é um ponteiro? Como o gcc reclama abaixo? // if(List[3].Names == '\0') // Don't accept it | warning: comparison between pointer and zero character constant // puts("OK 4"); if(List[3].Names == "\0") puts("OK 5");
// if(List[3].Names == '0') // Don't accept it | warning: comparison between pointer and integer // puts("OK 6"); if(List[3].Names == NULL) puts("OK 7"); if(List[3].Names == "") puts("OK 8"); }
Enviado em 15/08/2019 - 05:12h
struct DbNames { char Names[5]; }; struct DbNames List[] = { {"A"}, {"B"}, {"C"} }; char Text[] = "ABC";
Text[0] = A Text[1] = B Text[2] = C Text[3] = 0 ou /0 (O Caracter Terminador do vetor)
if(Text[3] == 0) puts("OK 1"); // WORK if(Text[3] == '\0') puts("OK 2"); // WORK
List[0] = A List[1] = B List[2] = C
puts(List[3].Names); // O Resultado é ABC Como isso é possível? Pois não deveria ter valor dentro da lógica, pois esse campo não foi preenchido
List[0] = A, 0,0,0,0 porque ela tem espaço para 4 Caracteres + Terminador em Cada Linha List[1] = B, 0,0,0,0 porque ela tem espaço para 4 Caracteres + Terminador em Cada Linha List[2] = C, 0,0,0,0 porque ela tem espaço para 4 Caracteres + Terminador em Cada Linha
List[3] = 0,0,0,0,0 porque ela tem espaço para 4 Caracteres + Terminador em Cada Linha
size_t size = sizeof List / sizeof List[0]; printf("%d\n", size);
struct DbNames List[] = { {"A"}, {"B"}, {"C"}, {"0"} };
struct DbNames { char Names[2]; };
Enviado em 15/08/2019 - 05:30h
if(List[1].Names[0] == "B") // Apresenta o erro: warning: comparison between pointer and integer puts("OK 20");
Enviado em 15/08/2019 - 05:52h
O que me deixa ainda mais confuso, não faço a mínima idéia do que está errado! Tentando apenas comparar o Texto que está gravado na Struct, tanto que o comando puts IMPRIME ele corretamente, mas o IF não encontra o texto, sendo que quando estou comparando um INTEGER ele se comporta corretamente o IF#include <stdio.h> struct { char Names[5]; int Num; } List[] = { {"AAAA", 7}, {"BBB", 9}, {"C", 10} }; int main() { if(List[0].Num == 7) // FUNCIONA puts("OK 7"); puts(List[0].Names); // Imprime AAAA if(List[0].Names == "AAAA") // NÃO FUNCIONA Não encontra puts("OK A"); }
Enviado em 15/08/2019 - 10:33h
Uma das maneiras de fazer isso é percorrer o vetor de caracteres até o final dele, o que delimita o final de um vetor é o caractere '\0', então ficaria assim:int quantidadeRegistros = 0; for(int i = 0; names[i] != '\0'; i++) { quantidadeRegistros++; }
Enviado em 15/08/2019 - 14:24h
int quantidadeRegistros = 0; for(int i = 0; names[i] != '\0'; i++) { quantidadeRegistros++; }
if(List[3].Names == '0') // NÃO ACEITA | warning: comparison between pointer and integer puts("OK 6"); // É mais que óbvio é indiferente mudar a comparação, pq dá no mesmo if(List[3].Names != '0') // NÃO ACEITA | warning: comparison between pointer and integer puts("OK 60");
Enviado em 15/08/2019 - 15:15h
Você está misturando coisas distintas.Enviado em 15/08/2019 - 16:27h
char Text[] = "ABC";
#include <stdio.h> struct { char Names[5]; int Num; } List[] = { {"AAAA", 7}, {"BBB", 9}, {"C", 10} }; int main() { if(List[0].Num == 7) // FUNCIONA puts("OK 7"); puts(List[0].Names); // Imprime AAAA if(List[0].Names == "AAAA") // NÃO FUNCIONA Não encontra puts("OK A"); }
struct { char Names[5]; } List[10];
Enviado em 15/08/2019 - 16:44h
struct { char Names[5]; int Num; } List[] = { {"AAAA", 7}, {"BBB", 9}, {"C", 10} };
(gdb) p List[3] $1 = {Names = "\000\000\000\000", Num = 0}
char Text[] = "Teste"; (gdb) p Text[5] $2 = 0 '\000'
Enviado em 16/08/2019 - 03:39h
char Text[] = "ABC";
int i_arr[50]; // declara ‘i_arr’ como um array contendo 50 elementos do tipo int. double d_arr[20]; // declara ‘d_arr’ como um array contendo 20 elementos do tipo double. char c_arr[100]; // declara ‘c_arr’ como um array contendo 100 elementos do tipo char.
char *pc_arr[10]; // declara ‘pc_arr’ como um array contendo 10 elementos do tipo “ponteiro para char”. struct tm time_table[15]; // declara ‘time_table’ como um array contendo 15 elementos do tipo “struct tm”. float f_mat[20][10]; // declara ‘f_mat’ como um array contendo 20 elementos do tipo “array contendo 10 elementos do tipo float”.
unsigned primeiros_naturais[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
char nome[50]={'P', 'a', 'u', 'l', 'o'}; // Ocupa as cinco primeiras posições, e as 45 seguintes são preenchidas com zeros (caracteres nulos).
unsigned algarismos_pares[]={0, 2, 4, 6, 8}; // Tamanho calculado automaticamente para abrigar os 5 elementos listados. char bilabiais[]={'b', 'm', 'p'}; // Tamanho calculado automaticamente para abrigar os 3 elementos listados. NOTE QUE esta declaração NÃO DECLARA UMA STRING, mas apenas um array com três caracteres, pois não existe o byte terminador '\0' que caracterizaria uma string. double d_arr[]; // PROBLEMA: compilador não tem como calcular tamanho; no mínimo vai produzir uma mensagem de alerta, se não de erro, durante a compilação.
char nome[]="Paulo"; // equivalente a “char nome[]={'P', 'a', 'u', 'l', 'o', '\0'};”, que, por sua vez é equivalente a “char nome[6]={'P', 'a', 'u', 'l', 'o', '\0'};”. unsigned char objeto[]="bola"; // equivalente a “unsigned char objeto[5]={'b', 'o', 'l', 'a', '\0'}.”. wchar_t login[]=L"paulo1205"; // equivalente a “wchar_t login[10]={L'p', L'a', L'u', L'l', L'o', L'1', L'2', L'0', L'5', L'\0'};”.
int a[5]={0, 1, 2, 3, 4}, b[5]={1, 3, 5, 7, 9}, c[10]; int i; for(n=0; n<5; n++){ a[n]*=2; // OK: Elemento, por elemento, altera os valores contidos em a, fazendo com que cada um valha o dobro do que valia inicialmente. c[n*2]=a[n]; // OK: Altera os valores dos elementos de c, usando os valores dos elementos de a. c[n*2+1]=b[n]; // OK: Altera os valores dos elementos de c, usando os valores dos elementos de b. } // Agora a contém {0, 2, 4, 6, 8}, e c contém {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. a=b; // ERRO: não posso manipular o array inteiro de uma vez (até porque aqui, ‘a’ não indica mais o array inteiro, mas é apenas um ponteiro constante para o primeiro elemento). b=c; // ERRO: pelo mesmo motivo.
#include <stdio.h> struct { char Names[5]; int Num; } List[] = { {"AAAA", 7}, {"BBB", 9}, {"C", 10} }; int main() { if(List[0].Num == 7) // FUNCIONA puts("OK 7"); puts(List[0].Names); // Imprime AAAA if(List[0].Names == "AAAA") // NÃO FUNCIONA Não encontra puts("OK A"); }
Enviado em 16/08/2019 - 08:00h
FrmTips::FrmTips(wxWindow* parent, wxWindowID id) {
char* Nome[15];
char *Nome[15];
void FrmTips::OnBtAddClick(wxCommandEvent& event) {
void FrmTips::OnBtAddClick(wxCommandEvent &event) {
(void) printf("Bom dia");
char *pc_arr[10]; // declara ‘pc_arr’ como um array contendo 10 elementos do tipo “ponteiro para char”. struct tm time_table[15]; // declara ‘time_table’ como um rray contendo 15 elementos do tipo “struct tm”. float f_mat[20][10]; // declara ‘f_mat’ como um array contendo 20 elementos do tipo “array contendo 10 elementos do tipo float”.
unsigned primeiros_naturais[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
char bilabiais[]={'b', 'm', 'p'}; // Tamanho calculado automaticamente para abrigar os 3 elementos listados. NOTE QUE esta declaração NÃO DECLARA UMA STRING, mas apenas um array com três caracteres, pois não existe o byte terminador '\0' que caracterizaria uma string.
#include <stdio.h> int main() { char Text[] = "Teste"; char bilabiais[]={'b', 'm', 'p'}; puts("FIM"); }
struct DbNames List[] = { {"A"}, {"B"}, {"C"} };
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)
Linux Mint (21.2) não reconhece teclado mecanico RASEC da PCYES (1)