linux 中getcwd函数使用解析
来源:互联网 发布:西安朝阳软件培训中心 编辑:程序博客网 时间:2024/06/05 05:44
/*********************************************************************************
* Copyright: (C) 2017 alex_walker<alex_walker@126.com>
* All rights reserved.
*
* Filename: getcwd_test.c
* Description: This file
*
* Version: 1.0.0(10/10/2017~)
* Author: alex_walker <alex_walker@126.com>
* Log: 1, Release initial version on "10/10/2017
* 10:15:30 AM"
*
*********************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
int main(int argc,char *argv[])
{
unsigned char *buf = NULL;
//buf = malloc(50);
//unsigned char buf[50] = {0};
printf("p buf = %p\n",buf);
//buf = getcwd(NULL, 50);
//buf = getcwd(NULL, 5);
//buf = getcwd(buf, 50);
//buf = getcwd(buf, 5);
//getcwd(buf, 5);
//getcwd(buf, 50);
printf("p buf = %p\n",buf);
if(buf == NULL)
{
perror("failed to getcwd");
}
else
{
printf("pwd = %s,len = %d\n",buf,strlen(buf));
free(buf);
}
return 0;
}
指针赋值测试
测试1:
unsigned char *buf = NULL;
buf = getcwd(NULL, 50);
结果:
p buf = (nil)
p buf = 0x8ed9008
pwd = /home/huahuan/test,len = 18
测试2:在测试1的基础上把buf = getcwd(NULL, 50);改成buf = getcwd(NULL, 5);
结果:
p buf = (nil)
p buf = (nil)
failed to getcwd: Numerical result out of range
测试3:
unsignedchar*buf=NULL;
getcwd(buf, 50);
结果:
p buf = (nil)
p buf = (nil)
failed to getcwd: Success
malloc赋值测试
测试1:
unsignedchar*buf=NULL;
buf = malloc(50);
buf = getcwd(NULL, 50);
结果::
p buf = 0x8a4e008
p buf = 0x8a4e040
pwd = /home/huahuan/test,len = 18
取到了目录地址,但是buf的地址不再是malloc的地址,对比测试1可知,发生了内存泄漏,当参数1为NULL时,getcwd会再次创建malloc空间。
测试2:在测试4的基础上buf = getcwd(NULL, 50)改为 getcwd(buf, 50)
结果:
p buf = 0x9dcf008
pbuf = 0x9dcf008
pwd = /home/huahuan/test,len = 18
测试3: 在测试5的基础上getcwd(buf, 50)改为getcwd(buf, 5)
结果:
p buf = 0x97e0008
p buf = 0x97e0008
pwd = ,len = 0
数组赋值测试
测试1:不使用指针,使用数组
unsigned char buf[100] = {0};printf("p buf = %p\n",buf);getcwd(buf,sizeof(buf));printf("p buf = %p\n",buf);if(getcwd(buf,sizeof(buf)) == NULL ){perror("failed to getcwd");}else { printf("pwd = %s,len = %d\n",buf,strlen(buf));//free(buf);}
结果 :
p buf = 0xbfff2888p buf = 0xbfff2888pwd = /home/huahuan/test,len = 18
测试2:
将unsigned char buf[100] = {0};改为unsigned char buf[5] = {0};
将getcwd(buf,sizeof(buf));改为getcwd(buf,5);
结果:
p buf = 0xbfc6964bp buf = 0xbfc6964bfailed to getcwd: Numerical result out of range
结论:
使用malloc,需要将缓存地址指针赋值给参数1,且空间一定要大于路径长度,否则函数错误,且error报错
使用数组,需要将缓存地址指针赋值给参数1,且空间一定要大于路径长度,否则函数错误,且error报错
使用
推荐使用:使用指针赋值,且参数1 为NULL,系统会自动给指针创建相应大小的malloc空间,记得在调取函数完毕后,free空间
* Copyright: (C) 2017 alex_walker<alex_walker@126.com>
* All rights reserved.
*
* Filename: getcwd_test.c
* Description: This file
*
* Version: 1.0.0(10/10/2017~)
* Author: alex_walker <alex_walker@126.com>
* Log: 1, Release initial version on "10/10/2017
* 10:15:30 AM"
*
*********************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
int main(int argc,char *argv[])
{
unsigned char *buf = NULL;
//buf = malloc(50);
//unsigned char buf[50] = {0};
printf("p buf = %p\n",buf);
//buf = getcwd(NULL, 50);
//buf = getcwd(NULL, 5);
//buf = getcwd(buf, 50);
//buf = getcwd(buf, 5);
//getcwd(buf, 5);
//getcwd(buf, 50);
printf("p buf = %p\n",buf);
if(buf == NULL)
{
perror("failed to getcwd");
}
else
{
printf("pwd = %s,len = %d\n",buf,strlen(buf));
free(buf);
}
return 0;
}
指针赋值测试
测试1:
unsigned char *buf = NULL;
buf = getcwd(NULL, 50);
结果:
p buf = (nil)
p buf = 0x8ed9008
pwd = /home/huahuan/test,len = 18
测试2:在测试1的基础上把buf = getcwd(NULL, 50);改成buf = getcwd(NULL, 5);
结果:
p buf = (nil)
p buf = (nil)
failed to getcwd: Numerical result out of range
测试3:
unsignedchar*buf=NULL;
getcwd(buf, 50);
结果:
p buf = (nil)
p buf = (nil)
failed to getcwd: Success
malloc赋值测试
测试1:
unsignedchar*buf=NULL;
buf = malloc(50);
buf = getcwd(NULL, 50);
结果::
p buf = 0x8a4e008
p buf = 0x8a4e040
pwd = /home/huahuan/test,len = 18
取到了目录地址,但是buf的地址不再是malloc的地址,对比测试1可知,发生了内存泄漏,当参数1为NULL时,getcwd会再次创建malloc空间。
测试2:在测试4的基础上buf = getcwd(NULL, 50)改为 getcwd(buf, 50)
结果:
p buf = 0x9dcf008
pbuf = 0x9dcf008
pwd = /home/huahuan/test,len = 18
测试3: 在测试5的基础上getcwd(buf, 50)改为getcwd(buf, 5)
结果:
p buf = 0x97e0008
p buf = 0x97e0008
pwd = ,len = 0
数组赋值测试
测试1:不使用指针,使用数组
unsigned char buf[100] = {0};printf("p buf = %p\n",buf);getcwd(buf,sizeof(buf));printf("p buf = %p\n",buf);if(getcwd(buf,sizeof(buf)) == NULL ){perror("failed to getcwd");}else { printf("pwd = %s,len = %d\n",buf,strlen(buf));//free(buf);}
结果 :
p buf = 0xbfff2888p buf = 0xbfff2888pwd = /home/huahuan/test,len = 18
测试2:
将unsigned char buf[100] = {0};改为unsigned char buf[5] = {0};
将getcwd(buf,sizeof(buf));改为getcwd(buf,5);
结果:
p buf = 0xbfc6964bp buf = 0xbfc6964bfailed to getcwd: Numerical result out of range
结论:
使用malloc,需要将缓存地址指针赋值给参数1,且空间一定要大于路径长度,否则函数错误,且error报错
使用数组,需要将缓存地址指针赋值给参数1,且空间一定要大于路径长度,否则函数错误,且error报错
使用
推荐使用:使用指针赋值,且参数1 为NULL,系统会自动给指针创建相应大小的malloc空间,记得在调取函数完毕后,free空间
阅读全文
0 0
- linux 中getcwd函数使用解析
- linux之getcwd函数解析
- chdir getcwd 函数的使用过程中出现的问题
- getcwd函数
- getcwd函数
- getcwd函数
- getcwd函数简介
- getcwd()函数的用法
- getcwd函数学习
- C 中getcwd()
- chdir、fchdir 和 getcwd 函数
- chdir、fchdir 和 getcwd 函数
- os.getcwd()函数的用法
- 8Linux服务器编程之:chdir()函数和cd命令,getcwd()函数和pwd
- getcwd
- getcwd
- getcwd
- getcwd()
- 在前端眼中pc端和移动的开发区别
- 算法系列——Restore IP Addresses
- 浏览器加载图片错误解决方案
- ftp命令学习总结
- pinpoint安装部署实践
- linux 中getcwd函数使用解析
- P78使用getline读取一整行
- tcp与udp
- Laravel 中 微信开发 csrf_token 验证问题
- display:none和visible:hidden的区别
- linux下软件编译与安装
- C/C++中宏概念理解
- 沉迷系列-教育自适应学习算法
- Spring注解@Component、@Repository、@Service、@Controller区别