如何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};

浙公网安备 33010602011771号