rafaelrrf
Membro Pleno-
Posts
45 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que rafaelrrf postou
-
Pessoal, Como seria possivel obter o numero de bytes de um endereço de um ponteiro? por exemplo: char x[100]; char *ptr; ptr = &x; sizeof(*ptr); O que eu tento fazer é dar um sizeof no conteudo do ponteiro, mas quando faço isso obtenho o numero de bytes do tipo do ponteiro. Alguma sugestao para obter o numero de bytes do endereço do ptr?
-
Sim, mas vamos supor que o tamanho do atributo da struct, nós não conhecemos. Eu só quero saber se é possivel obter o numero de bytes atraves de um ponteiro de um atributo que é a apontado pelo mesmo.
-
Pessoal se eu tenho uma struct Teste, por ex: struct Teste {int a;char b[10];}Teste;void main() {char *ponteiro;ponteiro = &Teste.b;printf("Sizeof do atributo B: %d", sizeof(ponteiro));} Porque quando dou o printf ele não me da o numero de bytes do atributo da struct? Ele está me dando o numero de bytes da variavel ponteiro, mas eu quero o numero de bytes do atributo que ela está apontando. Alguem saberia? Agradeço.
-
Pessoal, se eu tenho um ponteiro do tipo char que aponta para o endereço da struct "Teste", por exemplo: char *ponteiro = &Teste; Supondo que o endereço apontado pelo ponteiro seja 0x0001, ou seja, o endereço do primeiro atributo da struct. Como eu faria para incrementar esse ponteiro para que ele recebesse o endereço do segundo atributo da struct?
-
Legal @isrnick, ajudou muito. Resolvido.
-
Legal @isrnick, parece que este é o caminho. Afinal, pode me explicar o que está acontecendo no código? Agradeço.
-
Eu quero imprimir meu buffer. Sim, cada char ocupa 1 Byte. Vejamos um novo exemplo, tenho um vetor de char de 50 bytes : char buffer[50]. E uma variavel inteira: int x = 10. O que eu quero é passar apenas o valor de "x" para o "buffer", ou seja, como x tem 4 bytes, acredito que ocupara então 4 bytes no buffer. Sendo assim ocupará 4 posições no buffer, certo? Mas eu quero fazer essa passagem sem usar funções de conversão, como sprintf. O que eu quero é algo como passar o conteudo do endereço de cada byte do inteiro para o buffer usando ponteiros, mas n estou conseguindo fazer isso. Conseguiu entender?
-
E porque não consigo imprimir o vetor char com %s? Por exemplo: printf( "show int32_b: = %s\n", int32_b ); Isso quer dizer que algo foi modificado...
-
Mas em quais posições do array eu estou inserindo o numero 10 que é o valor de x? Como eu faria para inserir em outra posição? Pelo visto você esta convertendo o array para um inteiro com o cast, mas eu não quero me desfazer dele, preciso imprimir ele como uma string. Pois também tenho que inserir nesse array, caracteres, além dos valores inteiros. Seria possível?
-
Não quero usar nenhum tipo de conversão como sprintf etc. O que eu queria fazer era atribuir o valor inteiro que tem 4 bytes no meu sistema, para o vetor char, ocupando apenas 4 bytes no mesmo, seria possível?
-
Viventes, Se eu tenho um vetor char de 10 posições: char v[10]. E um inteiro x com valor 10: int x = 10. Como eu poderia passar para o vetor "v" o valor inteiro em "x" usando ponteiros?
-
Amigo, tente ler novamente minha pergunta, acho que você não entendeu...
-
Pessoal Eu tenho um vetor buffer do tipo char, e quero alocar nele um valor inteiro, como isso é possível sem utilizar a função sprintf ? e como obter o numero de numeros contidos no valor da variável? Pois o meu problema é que tenho uma estrutura, e tenho no corpo do programa um buffer que vai receber todos os atributos da estrutura, cada atributo na sua sequencia. E estou usando subtração de ponteiros obter o deslocamento de cada atributo no buffer, com o deslocamento obtido eu consigo armazenar os valores das variaveis na sua sequencia, mas o problema são as variaveis do tipo int e float na estrutura, porque quando faço o deslocamento com ponteiros, ele conta apenas 4 bytes(Tamanho de um int). E se eu tiver usado o sprintf, e inserido os valores no buffer, se o valor conter mais que 4 numeros, o ultimo provavelmente será sobreposto pelo proximo atributo da estrutura. Podem ajudar?
-
Consegui fazer sem o return rs. Nao sei se é posivel usar esse comando em uma macro. Mas tudo bem. Um problema que ocorreu na macro é esse: note: in expansion of macro 'func' Sabe resolver isso?
-
Hum isso eu entendo. O meu problema é que eu tenho uma função que está retornando um char *, e quero transformar ela em uma macro...
-
Como eu poderia fazer ela retornar algo? como um return de função. 0 e -1
-
Pessoal, Alguem saberia como criar uma macro da função abaixo: int func(int *a, int * {int c = *a+*b;return c;}
-
Opa deu certo, Obrigado pela ajuda ^^. Pode me explicar melhor como isso funciona?
-
Exato, este exemplo não esta completo. v1, v2 e v3 fazem parte de um struct externa. Fiz testes criando v1, v2 e v3 local e deu certo. O problema esta em alguma coisa na struct :s struct teste {char v1[5];char v2[5];char v3[5];}teste;void main() {char *buffer = "AAAAABBBBBCCCCC";char *ptr;ptr = &buffer[0];strncpy(teste.v1, ptr, 5);ptr = &buffer[10)]; strncpy(teste.v2, ptr, 5);ptr = &buffer[20];strncpy(teste.v3, ptr, 5);}
-
Sim. Não funcionou colocando o caracter \0, eu fiz v1[9] = '\0' antes de imprimir que é a ultinha posição no final Ta fazendo isso: V1: AAAAABBBBBCCCCC V2: BBBBBCCCCC V3: CCCCCC Se eu dou um printf em baixo de cada strncat, ele faz a impressão correta. Mas quando faço dps dos três strncat faz isso, concatena todos ><
-
Deu certo aquele codigo agora. Mas causou outro problema aqui, quando executa esse codigo: ptr = &buffer[0]; strncpy(v1, ptr, 5); ptr = &buffer[10)]; strncpy(v2, ptr, 5); ptr = &buffer[20]; strncpy(v3, ptr, 5); Estou copiando do buffer alguns bytes para v1, v2, v3 usando ptr para determinar a posição. Mas quando dou um printf em v1,v2 e v3. V1 fica concatenado com v2, e v2 fica concatenado com v3. Saberia me dizer onde esta o erro?
-
Por exemplo: Eu tenho um vetor char vet[1000], e outro char atributo[10]. Eu queria passar o endereço de cada um para ponteiros diferentes para fazer uma subtração dos dois. Neste caso eu poderia obter o valor 1000 ou 10. É o que ocorre neste cod: char *ptr1, *ptr2, *aux; char v1[8], v2[33270]; ptr1 = &v1[0]; ptr2 = &v2[0]; printf("%d\n", ptr1); printf("%d\n", ptr2); printf("%d\n", ptr1-ptr2); Ele roda no windows certo, mas no linux o valor da subtração não bate com o tamanho em bytes do vetor v1 e v2.
-
Sim, exato. E como eu faria isso? Neste codigo: char *pont1, *pont2; char v1[33270], v2[10]; pont1 = v1; // pont1 = &v1[0] pont2 = v2; printf("PTR1: %li\n", pont1); printf("PTR2: %li\n", pont2); printf("RESULTADO: %li\n", pont1-pont2); o RESULTADO da 1296, sendo que teria que dar 10. Compilei esse codigo no Windows e funcionou, portanto estou usando o Ubuntu, não sei se isso interfere.
-
Deu certo tirando o &. Valeu! @olliver.soul, O que pretendo é pegar os endereço dos dois ponteiros, subtrair para obter o valor de um dos vetores (v1 e v2). Quando altero para %s da esse warning: progc.h:23:2: warning: format ‘%s’ expects argument of type ‘char *’, but argume nt 2 has type ‘long int’ [-Wformat=] printf("RESULTADO: %s\n", ptr1-ptr2);
-
Pessoal, Estou usando este codigo: char v1[10000], v2[8]; ptr1 = &v1; ptr2 = &v2; printf("PTR1: %li\n", ptr1); printf("PTR2: %li\n", ptr2); Quando eu compilo ele, ocorre este erro: progc.h:16:7: warning: assignment from incompatible pointer type [enabled by default] ptr1 = &v1; ^ progc.h:17:7: warning: assignment from incompatible pointer type [enabled by default] ptr2 = &v2; ^ progc.h:19:2: warning: format ‘%li’ expects argument of type ‘long int’, but argument 2 has type ‘char *’ [-Wformat=] printf("PTR1: %li\n", ptr1); ^ progc.h:20:2: warning: format ‘%li’ expects argument of type ‘long int’, but argument 2 has type ‘char *’ [-Wformat=] printf("PTR2: %li\n", ptr2); Alguem saberia resolver esses warnings?
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