c - opendir() 系统调用后指向 char 的指针发生变化

标签 c linux system-calls opendir

我目前正在尝试使用 c 从系统调用中删除目录,但我遇到了一个奇怪的问题。在我的deleteFunction() 之后使用char * path 打开目录。 path 的值发生变化

部分代码如下:

#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void deleteDir(char *path){
    //opening the directory
    printf("BEFORE %s\n",path );
    DIR *p = opendir(path);
    if (p == NULL){
        printf("Directory not Opened!\n");
        exit(2);
    }
    printf("AFTER %s\n",path );
}

void main(int argc,char *argv[]){

    if (argc != 2){
        printf("Not enough Arguments!\n");
        exit(1);
    }

    //creating the path 
    char * currentDir = getcwd(NULL,0);
    strcat(currentDir,"/");
    strcat(currentDir,argv[1]);
    //deleting the directory
    deleteDir(currentDir);
    exit(0);
}

产生的输出是:

BEFORE /home/tarounen/test/newfolder
AFTER /home/tarounen/test/!�

注意:我只是将目录名作为参数

最佳答案

getcwd 函数可能正在分配足够的空间来保存当前路径,因此使用 strcat 添加更多字符会使缓冲区溢出,并导致未定义的行为。试试这个

char path[MAXPATHLEN];
getcwd( path, MAXPATHLEN );
strcat( path, "/" );
strcat( path, argv[1] );

关于c - opendir() 系统调用后指向 char 的指针发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705760/

相关文章:

c - 具有静态变量的信号处理程序中的竞争条件

c - 查找以另一个文本开头的文本

interrupt - 为什么使用中断处理系统调用?

c - 在 Linux 中查找命令的内置和可执行文件的路径

c - for 循环赋值溢出到另一个变量

linux - vscode 关于 WSL 问题 : editing cursor goes backward when opening bracket or braces

linux - 如何在 hadoop 中恢复 Task Tracker 和 Job Tracker?

linux - 如何使用 GDB 创建测试脚本

linux - mknod() 不创建命名管道

c++ - 为什么我们可以映射到一个文件但超过文件大小?