rafaelrrf
-
Posts
45 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por rafaelrrf
-
-
-
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?
-
-
-
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?
-
-
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?
-
-
-
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: CCCCCCSe 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
Endereço de ponteiro
em C/C#/C++
Postado
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?