2013-11-14 215 views
1

以下程序的工作原理:访问结构成员字符指针

int main() 
{ 
    char *g[10]; 
    char a[10] = "test"; 
    g[0] = &a[0]; 
    printf("string = %s\n",g[0]); 
    exit(0); 
} 

输出:测试

但是,这并不工作:

int main() 
{ 
    char t[] = "test"; 
    struct abc 
    { 
     char *a[255]; 
    }*p; 
    p->a[0] = &t[0]; 
    printf("value = %s\n", p->a[0]); 
    exit(0); 
} 

输出:分段故障

有人可以告诉代码的第二部分可能存在什么问题?对不起,如果我有错误地张贴在这里。

回答

3

在您的第二个代码中,您正在使用指针p而无需初始化它。这导致未定义的行为
试试这个

struct abc q; 
p = &q; 
p->a[0] = t; 
printf("value = %s\n", p->a[0]); 
+0

@Gabson;这真是一个很好的问题。 'char * a []'表示'a'是指向'char'的指针数组。 'char * a'将'a'定义为指向'char'的指针,而'char a []'将'a'定义为'char'数组。进一步阅读[Answer1](http://stackoverflow.com/a/18361686/2455888)和[Answer2](http://stackoverflow.com/a/18364638/2455888)。 – haccks