日期:2014-05-16  浏览次数:20699 次

关于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",当然出错了。
程序搞不好还会奔溃呢。