如何out一个二级字符指针

: rt, 代码如下,但结果不正确,哪位大侠帮看看?
:
: #include <stdio.h>
: #include <unistd.h>
: #include <stdlib.h>
:
: void test_pp_out(char***ppp)
: {
:     char*v[]={"xy","how","shit",NULL};
:     *ppp=v;
:     char**p2=v;
:     printf("%ld\n",*ppp);
:     while(*p2){
:         printf("%ld:%s\n",p2,*p2);
:         p2++;
:     }
: }
:
: int main(int argc, char*argv[])
: {
:     int i=0;
:     char**pp=NULL;
:     test_pp_out(&pp);
:     printf("%d\n",pp);
:     while(*pp)
:     {
:         printf("%d: %s: %ld\n",i++,*pp,pp);
:         pp++;
:     }    
:    
:     exit(0);
: }

 

 

错误根本原因:
自认为字符串常量存放在rodata区,在程序生命期内不会改变,觉得只要指向他们的地址是正确的,就应该得到正确的值,但忽略了作为中间传递过程的v是在stack上,其指向字符串的地址会发生变化,导致出错。
结贴!

 

static char*v[]={"xy","how","shit",NULL};

posted @ 2011-12-17 03:28  alxe_yu  阅读(144)  评论(0)    收藏  举报