c - 在 C 中使用 strcat 获取权限

标签 c

请帮忙,快疯了,现在已经尝试这样做 8 个小时了,但从来没有用过。我意识到我可以很容易地打印出文件的权限,我已经设法做到了,但是我不能使用这种方法来返回它。

char *printMode(mode_t mode) {
    char *myString = (char *)calloc(11, sizeof(char));

    mode_s = ((S_ISDIR(mode)) ? "d" : "-");
    strcat(mode_s, ((mode & S_IRUSR) ? "r" : "-"));
    strcat(mode_s, ((mode & S_IWUSR) ? "w" : "-"));
    strcat(mode_s, ((mode & S_IXUSR) ? "x" : "-"));
    strcat(mode_s, ((mode & S_IRGRP) ? "r" : "-"));
    strcat(mode_s, ((mode & S_IWGRP) ? "w" : "-"));
    strcat(mode_s, ((mode & S_IXGRP) ? "x" : "-"));
    strcat(mode_s, ((mode & S_IROTH) ? "r" : "-"));
    strcat(mode_s, ((mode & S_IWOTH) ? "w" : "-"));
    strcat(mode_s, ((mode & S_IXOTH) ? "x" : "-"));

    return myString;
}

最佳答案

问题是这两行:

char *mode_s = (char *) calloc(MODE_S_LEN, sizeof(char));
mode_s = ((S_ISDIR(mode)) ? "d" : "-");

第一个使mode_s 指向您分配的内存。下一行让它指向 "d""-"。您重新分配指针并使其指向其他地方。

由于您将分配的内存初始化为零,因此您也可以在此处使用 strcat。或者 strcpy

关于c - 在 C 中使用 strcat 获取权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307440/

相关文章:

c - 串行控制和等待响应

c - 在父进程中使用 fork() 的结果

c - 当尝试除两个 float 时,Xcode 会自动转到 lldb

c - 我正在使用 PID 创建一个终止进程

c - 在 C 中创建图形时出错

c - 为什么我不能比较字符串

C - 字符串的最佳实践

c - 当我添加代码来设置路径并想要检索文件(在我的程序中选择2)时,它将显示段错误(核心转储)

C 简单程序不工作 - "if"

c - 返回语句后的序列点?