2014-02-10 124 views
0

所以我试图创建一个目录,我不知道为什么它会死的时候,我这样做。我已经尝试了路径的硬编码测试,所以我不认为它是一个权限问题。当我分开我想创建的路径时,我确保NULL终止字符串。我甚至试图得到与GetLastError()错误,但它崩溃的程序,所以我不能。我做错了什么?CreateDirectory崩溃程序

编辑:: 如果我取消注释main中的行,让它创建文件夹并删除它,然后再尝试在函数中创建它,函数将成功。什么......这实际上是一个许可问题?

int main(void) { 
    int start; 

    char* test = "C:\\Users\\Daniel\\Desktop\\temp\\second"; 
    // CreateDirectory(test, NULL); //this works 

    fileCopy("C:\\Users\\Daniel\\Desktop\\temp\\second\\datanew.txt"); 

    return EXIT_SUCCESS; 
} 


int fileCopy(char* path){ 

char line[500]; 

FILE *new; 
FILE *old; 

char *old_path = "C:\\Users\\Daniel\\Desktop\\temp\\data.txt"; 

//"C:\\Users\\Daniel\\Desktop\\temp.txt" 
old = fopen(old_path, "r"); 
new = fopen(path, "w"); 

if(old != NULL){ 
     if(new == NULL){ 

      char * last; 
      last = strrchr(path, 92); //the \ character 

      int size = strlen(path)-strlen(last); 

      char *dir; 
      dir = memcpy(dir, path, size + 1); 
      dir[size] = '\0'; 
      CreateDirectory(dir, NULL); 
      new = fopen(path, "w"); 
     } 

} 

return 0; 

} 

回答

2

您没有为“dir”分配任何内存。

char *dir; 
dir = malloc(sizeof(char) * (size + 1)); 
dir = memcpy(dir, path, size + 1); 
+1

......换句话说,丹尼尔,它没有权限问题,但“只是”未定义的行为在您的程序。 – deviantfan

+0

好的,谢谢它的工作。这可能超出了答案的范围,为什么要做我在我的编辑中描述的原因导致它的工作?为什么在调试器中显示正确的值? – Daniel

+0

自动变量(如dir)在没有任何初始化的情况下被分配到堆栈中(它将堆栈中的任何值)。它看起来像调用CreateDirectory()留下一个值,该值在内存中的空闲位置与调用fileCopy()时分配dir的堆栈位置相匹配。 – Fernando