Aula #6 Duvidas de formato #15

Open
opened 2025-05-28 10:11:21 -03:00 by drginfo · 1 comment

No código original do Blau, eu fiz algumas modificações(experimentos na verdade), quanto as saídas do printf, especificamente a saída em hexadecimal decimal. Segue o código:

ORIGINAL:


#include <stdio.h>

int main() {

    char vstr[] = "bacana";
    char *pstr = "calado";

    printf("%p --> %s\n", vstr, vstr);
    printf("%p --> %s\n", pstr, pstr);
    
    return 0;
}

EXPERIMENTO MODIFICADO:

#include <stdio.h>

int main(void) {

        // as definições strings abaixo também 
        // podem ser declaradas assim:
        // char string[] = "banana";
        // char string[] = {'b', 'a', 'n', 'a', 'n', 'a', '\0};

        char vstr[] = "bacana";
        char *pstr = "calado";
        char *pont = vstr;

        printf("%p --> %s\n", vstr, vstr);
        printf("%p --> %s\n", pstr, pstr);
        puts("--------------------------------");

        // percorre todo vetor, apontando o endereço e o caracter associado a ele:
        for (long unsigned i = 0; i < sizeof(vstr); i++) {
                printf("ADDR(vstr)      :%p <-- : %c\n", &vstr[i], *(vstr + i));
                printf("V_ASCII hex     :%x <-- : %c\n", *(pont + i), *(vstr + i));
                printf("V_ASCII dec     :%d <-- : %c\n", *(pont + i), *(vstr + i));
        }

        return 0;

}

Compilando com as verificações extras 'gcc -Wall -Wextra -Werror vetorstring.c -o vetorstring', gerou o binário executável, com seus devidos caracteres impressos corretamente pelo printf:

./vetorstring

0x7ffe92d1b251 --> bacana
0x555de079f008 --> calado
--------------------------------
ADDR(vstr)	:0x7ffe92d1b251 <-- : b
V_ASCII hex	:62 <-- : b
V_ASCII dec	:98 <-- : b
ADDR(vstr)	:0x7ffe92d1b252 <-- : a
V_ASCII hex	:61 <-- : a
V_ASCII dec	:97 <-- : a
ADDR(vstr)	:0x7ffe92d1b253 <-- : c
V_ASCII hex	:63 <-- : c
V_ASCII dec	:99 <-- : c
ADDR(vstr)	:0x7ffe92d1b254 <-- : a
V_ASCII hex	:61 <-- : a
V_ASCII dec	:97 <-- : a
ADDR(vstr)	:0x7ffe92d1b255 <-- : n
V_ASCII hex	:6e <-- : n
V_ASCII dec	:110 <-- : n
ADDR(vstr)	:0x7ffe92d1b256 <-- : a
V_ASCII hex	:61 <-- : a
V_ASCII dec	:97 <-- : a
ADDR(vstr)	:0x7ffe92d1b257 <-- : 
V_ASCII hex	:0 <-- : 
V_ASCII dec	:0 <-- : 

No código original do Blau, eu fiz algumas modificações(experimentos na verdade), quanto as saídas do printf, especificamente a saída em hexadecimal decimal. Segue o código: ORIGINAL: ``` #include <stdio.h> int main() { char vstr[] = "bacana"; char *pstr = "calado"; printf("%p --> %s\n", vstr, vstr); printf("%p --> %s\n", pstr, pstr); return 0; } ``` EXPERIMENTO MODIFICADO: ``` #include <stdio.h> int main(void) { // as definições strings abaixo também // podem ser declaradas assim: // char string[] = "banana"; // char string[] = {'b', 'a', 'n', 'a', 'n', 'a', '\0}; char vstr[] = "bacana"; char *pstr = "calado"; char *pont = vstr; printf("%p --> %s\n", vstr, vstr); printf("%p --> %s\n", pstr, pstr); puts("--------------------------------"); // percorre todo vetor, apontando o endereço e o caracter associado a ele: for (long unsigned i = 0; i < sizeof(vstr); i++) { printf("ADDR(vstr) :%p <-- : %c\n", &vstr[i], *(vstr + i)); printf("V_ASCII hex :%x <-- : %c\n", *(pont + i), *(vstr + i)); printf("V_ASCII dec :%d <-- : %c\n", *(pont + i), *(vstr + i)); } return 0; } ``` Compilando com as verificações extras *'gcc -Wall -Wextra -Werror vetorstring.c -o vetorstring'*, gerou o binário executável, com seus devidos caracteres impressos corretamente pelo printf: ``` ./vetorstring 0x7ffe92d1b251 --> bacana 0x555de079f008 --> calado -------------------------------- ADDR(vstr) :0x7ffe92d1b251 <-- : b V_ASCII hex :62 <-- : b V_ASCII dec :98 <-- : b ADDR(vstr) :0x7ffe92d1b252 <-- : a V_ASCII hex :61 <-- : a V_ASCII dec :97 <-- : a ADDR(vstr) :0x7ffe92d1b253 <-- : c V_ASCII hex :63 <-- : c V_ASCII dec :99 <-- : c ADDR(vstr) :0x7ffe92d1b254 <-- : a V_ASCII hex :61 <-- : a V_ASCII dec :97 <-- : a ADDR(vstr) :0x7ffe92d1b255 <-- : n V_ASCII hex :6e <-- : n V_ASCII dec :110 <-- : n ADDR(vstr) :0x7ffe92d1b256 <-- : a V_ASCII hex :61 <-- : a V_ASCII dec :97 <-- : a ADDR(vstr) :0x7ffe92d1b257 <-- : V_ASCII hex :0 <-- : V_ASCII dec :0 <-- : ```
Owner

@drginfo wrote in #15 (comment):

printf("Valor hex :%p <-- : %c\n", *(pont + i), *(vstr + i));

Para imprimir o valor em hexa, a gente usa %x. O %p é para endereços. Pode até usar %02x para o byte ser impresso com um 0 à esquerda quando for menor que 0x10.

@drginfo wrote in https://bolha.dev/blau_araujo/cblc/issues/15#issue-15: > printf("Valor hex :%p <-- : %c\n", *(pont + i), *(vstr + i)); Para imprimir o valor em hexa, a gente usa `%x`. O `%p` é para endereços. Pode até usar `%02x` para o byte ser impresso com um `0` à esquerda quando for menor que `0x10`.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: blau_araujo/cblc#15
No description provided.