数组当函数参数时,所带来的问题?

来源:互联网 发布:调音师知乎 编辑:程序博客网 时间:2024/05/17 02:27

今天写了一个小deamon,利用二维数组,当函数参数,用于获取子函数传出来的字符串,发现在主函数里,就是打印不出来字符串

#include <stdio.h>                                                                 

 #include <stdlib.h>                                                                
                                                                            

void test( char ***buf)                                                            

{                                                                                  
       char **p = *buf;                                                           
       printf("sizeof = %d\n", sizeof(buf));                                      
       printf("test buf = %p\n", buf);                                            
       printf("test buf + 1= %p\n", buf + 1);  
                     //此时的buf+1  与main的buf + 1不同             
                                                                                    
       strcpy( buf, "hello");                                                     
       strcpy( buf + 1, "world");                                                 
       //strcpy( &buf +1, "world");                                               
       //strcpy(&buf[1], "world1");                                               
}  

int main()                                                                         
{                                                                                  
         char buf[16][16];                                                        
          memset(buf, 0, sizeof(buf));                                               
          test(&buf);                                                                
           printf("sizeof = %d\n",sizeof(buf));                                       
          printf("main buf = %p\n", buf);                                            
          printf("main buf +1 = %p\n", buf + 1);    
                                
           //strcpy(buf, "hello");                                                    
           //strcpy( buf +1, "world");                                                
          printf("%s\n",buf);                                                        
          printf("%s\n",buf[1]);                                                     
         //printf("%s\n", *(buf +1));                                               
         return 0;                                                                  
  }      


在main函数里定义了二维数组,想通过二维数组获取条用函数的字符串,尝试各种方法都不行

1、直接使用二维数组的首元素作为函数参数  test(buf);

2、直接使用了三级指针做函数,还是不行test(&buf);


在各函数中打印了指针的地址, 使用%p可以打印,对比了buf 和 buf + 1,在子函数里 buf + 1 与 主函数的 buf + 1 有所不同, 在二维数组当函数参数时,此时子函数buf 是局部变量,因此在buf + 1 时,就地址就相当于

buf + sizeof(char *) , 与main函数的 buf + 1, 不同


想从子函数获取字符串,可以先在堆上分配空间,在使用地址,获取字符串,最后再释放内存空间







原创粉丝点击