C -获取目录路径



我正在编写一个程序,当在一个目录中执行时,将生成一个包含该目录中所有内容的文本文件。我正在从**argv到主目录路径,因为我使用netbeans和cygwin,我必须在我的char* get_path(char **argv)函数中对获得的路径进行一些字符串操作。目录路径大小总是不同的,因此我用malloc分配空间来将其存储在内存中。

程序片段:

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include "dbuffer.h"  //my own library
#include "darray.h"   //my own library
ARR* get_dir_contents( char* path)
    {
    DBUFF *buff = NULL;
    ARR *car = NULL;   
    DIR *dir_stream = NULL;
    struct dirent *entry = NULL;
    dir_stream = opendir(path);
    if(opendir(path)==NULL) printf("NULL");
    //... more code here 
    return car;
    }
char* get_path(char **argv)
    {
    char *path = malloc(sizeof(char)* sizeof_pArray( &argv[0][11] ) + 3 );
    strcpy(path, "C:");
    strcat(path, &argv[0][11]);
    printf("%s, sizeof: %d n",path, sizeof_pArray(path));
    return path;
    }
int main(int argc, char** argv) 
    {  
    char *p = get_path(argv);
    ARR *car = get_dir_contents(&p[0]);
    //... more code here 
    return (EXIT_SUCCESS);
    }

问题是我拥有的字符串没有初始化dir_stream指针。我怀疑这是因为指针和字符串字面量之间的一些差异,但我不能准确地指出它是什么。另外,不同的库函数期望DIR *opendir(const char *dirname); const char可能与此有关。

输出:

C:/Users/uk676643/Documents/NetBeansProjects/__OpenDirectoryAndListFiles/dist/Debug/Cygwin_4.x-Windows/__opendirectoryandlistfiles, sizeof: 131 
NULL
RUN FAILED (exit value -1,073,741,819, total time: 2s)

这里有一些事情可能出错,所以我建议这样做

char* get_path(char *argv)
{
  char *path = malloc(sizeof(char)* strlen(argv) ); 
  if (path != NULL)
  {
    strcpy(path, "C:");
    strcat(path, argv + 11);
    printf("%s, sizeof: %d n",path, strlen(path));
  }
  return path;
}

...
char* p = get_path(*argv);

注意:您不需要额外的3字节,因为您分配的包括稍后跳过的11字节。虽然不是有11个字节的偏移,你可能想分解字符串,然后把它放在一起,以便它是可移植的。例如,使用strtok,您可以拆分路径并替换您不需要的部分。

可能是对argv的简单混淆吗?请插入以下几行就在main()的开头,这是你所期望的吗?

printf("n argv[0]== %s" , argv[0]  );
getchar();
printf("n argv[1]== %s" , argv[1]  );
getchar();

好的,所以我们从argv[0]工作,请尝试为get_path

char *get_path(char *argv)
{
int i=0;
// +2 to add the drive letter
char *path = malloc(sizeof(char)* strlen(argv)+2 );
if (path != NULL)
{
 strcpy(path, "C:");
 strcat(path, argv);
 // we get the path and the name of calling program
 printf("n  path and program== %s",path);
 printf("%s, sizeof: %d n",path, strlen(path));
 // now remove calling program name
   for( i=strlen(path) ; ; i--)
   {
     // we are working in windows
      if(path[i]=='\') break;
      path[i]='';
   }
 }
 return path;
}

相关内容

  • 没有找到相关文章

最新更新