2011-05-24 203 views
0

嘿,所有,我是一個指針新手,並在下面的代碼中,我試圖將2 D數組的值存儲在結構中,然後將其打印出來。但是,我得到一個編譯錯誤在線:f d->mychar[i] = newptr[i];我得到,雖然char * strstr[],char ** str相同str[][]相同,但我無法找到一個解決方案,使下面的工作。二維數組和指針

typedef struct mystruct{ 
    char mychar [20][20]; 
}mystruct_t; 

void printvalues (char ** newptr){ 
    int i; 
    mystruct_t * fd; 
    for (i=0;i<3;i++){ 
    fd->mychar[i] = newptr[i]; 
    printf("My value is %s and in struct %s\n", newptr[i], fd->mychar[i]); 
    } 
} 
int main (int argc, char **argv){ 
int i; 
char * abc[5] = {"123", "456", "789"}; 

for (i=0;i<3;i++){ 
    printf("My value is %s\n", abc[i]); 
} 
printvalues(abc); 
} 
+5

必須閱讀:http://c-faq.com/aryptr/index.html。 – 2011-05-24 17:02:42

回答

2

大部分問題是您使用未分配的結構。 您使用了一個指向mystruct_t的指針,但從未分配它。 以下爲我運行:

#include <stdio.h> 

typedef struct mystruct 
{ 
    char* mychar [20]; 
} mystruct_t; 

void printvalues(char** newptr) 
{ 
    int i; 
    // note: you used an unallocated pointer in your original code 
    mystruct_t fd; 
    for (i = 0; i < 3; i++) 
    { 
     fd.mychar[i] = newptr[i]; 
     printf("My value is %s and in struct %s\n", newptr[i], fd.mychar[i]); 
    } 
} 

int main(int argc, char **argv) 
{ 
    int i; 
    char * abc[5] = { "123", "456", "789" }; 

    for (i = 0; i < 3; i++) 
    { 
     printf("My value is %s\n", abc[i]); 
    } 
    printvalues(abc); 
} 
+0

不是真的,因爲這樣打印就好了! 'void printvalues(char ** newptr){int i; (i = 0; i <3; i ++){printf(「My value is%s \ n」,newptr [i]); }' } – lostinpointers 2011-05-24 17:13:02

+0

啊。我看到了我的錯誤。 – Jay 2011-05-24 21:08:36

+0

嗯,我真的想要這個char * mychar [20];成爲char mychar [20] [20]。我在我的結構中有多個2d數組,所以我確信我有連續的內存分配。 – lostinpointers 2011-05-25 18:28:51