关于linux一个简单的系统函数问题
int main()
{
int f;//用来存储mkdir返回值
char *buf=malloc(100);//配置为指向100个字节的内存
f= mkdir("yangjinze",0755);//创建目录yangjinze,指定目录访问权限,发现若目录存在则创建失败
if(f!=-1)
puts("创建目录成功\n");
else
puts("创建目录失败\n");
if(getcwd(buf,100)!=NULL)//获取当前工作目录的绝对地址
{
puts("当前工作目录:\n");
printf("%s\n",buf);
}
else
puts("获取当前工作目录失败\n");
if(chdir("/yang")!=-1)//改变当前工作目录,chdir,其实相当于cd
{
puts("改变工作目录成功\n");
//buf="0";//先清空字符串,为什么加上这一句的话,下面打印出来的就是"0",在C/C++,先清除原本内容不是很合理,linux为什么不用清除
getcwd(buf,100);//获取当前改变后的工作目录
printf("%s\n",buf);
}
else
puts("改变工作目录失败\n");
return 0;
}
------解决方案--------------------清空字符串是"\0",不是"0"
不管是win还是linux,字符串的处理没有什么区别,都是需要清空的,你测试的时候不需要清空,只是后续赋值的内容比之前的内容长,掩盖了问题而已
------解决方案--------------------buf="0"这个不是清空,是一个错误语句
清空应该buf[0]="\0"
在C语言中本来你的buf指向malloc分配的内存,然后你改变buf指向字符串常量"0",当然出错了。
程序搞不好还会奔溃呢。