2010-09-01 5 views
1

gcc 4.4.3 c89obtenir l'adresse du tableau de pointeurs en pointeurs sur char

J'essaie d'afficher l'adresse. Fondamentalement, je veux juste prouver que j'affiche la bonne adresse.

Je veux afficher l'adresse de chaque tableau de pointeurs vers char « device_gc », « device_mg », « device_cc »

Je les afficher dans ma fonction principale. Cependant, dans ma fonction display_list, je veux juste prouver que j'affiche la bonne adresse. La sortie est la même.

J'espère que vous comprenez?

Un grand merci pour vos suggestions.

#include <stdio.h> 

void display_list(char ***dev_list); 

int main(void) 
{ 
    char *device_gc[] = {"GCDEV01", "GCDEV02", "GCDEV03", "GCDEV04", "GCDEV05", "GCDEV06", NULL}; 
    char *device_mg[] = {"MGDEV01", "MGDEV02", "MGDEV03", "GCDEV05", NULL}; 
    char *device_cc[] = {"CCDEV01", "CCDEV02", "CCDEV03", "CCDEV04", "CCDEV05", NULL}; 

    char **device_list[] = {device_gc, device_mg, device_cc, NULL}; 

    printf("device_gc [ %p ]\n", (void*)*device_gc); 
    printf("device_mg [ %p ]\n", (void*)*device_mg); 
    printf("device_cc [ %p ]\n", (void*)*device_cc); 

    display_list(device_list); 

    return 0; 
} 

void display_list(char ***dev_list) 
{ 
    while(**dev_list != NULL) { 
     printf("dev [ %p ]\n", (void*)**dev_list++); 
    } 
} 

sortie souhaitée:

device_gc [ 0x80485e0 ] 
device_mg [ 0x8048610 ] 
device_cc [ 0x8048628 ] 
dev [ 0x80485e0 ] 
dev [ 0x8048610 ] 
dev [ 0x8048628 ] 

La sortie réelle que je reçois est différent et conduit parfois à une décharge de base. Pourquoi donc?

+0

S'il vous plaît indiquer votre question clairement – Sundar

Répondre

2

Deux modifications mineures. Vous ne devez pas déréférencer 'device_gc', etc. avant d'imprimer la valeur dans main(); vous ne devez utiliser un seul déréférencer dans display_list():

#include <stdio.h> 

void display_list(char ***dev_list); 

int main(void) 
{ 
    char *device_gc[] = {"GCDEV01", "GCDEV02", "GCDEV03", "GCDEV04", "GCDEV05", "GCDEV06", NULL}; 
    char *device_mg[] = {"MGDEV01", "MGDEV02", "MGDEV03", "GCDEV05", NULL}; 
    char *device_cc[] = {"CCDEV01", "CCDEV02", "CCDEV03", "CCDEV04", "CCDEV05", NULL}; 

    char **device_list[] = {device_gc, device_mg, device_cc, NULL}; 

    printf("device_gc [ %p ]\n", (void*)device_gc); 
    printf("device_mg [ %p ]\n", (void*)device_mg); 
    printf("device_cc [ %p ]\n", (void*)device_cc); 

    display_list(device_list); 

    return 0; 
} 

void display_list(char ***dev_list) 
{ 
    while(*dev_list != NULL) { 
     printf("dev [ %p ]\n", (void*)*dev_list++); 
    } 
} 
+0

Merci pour votre aide. – ant2009

Questions connexes