【问题标题】:C: d_name of readdir cannot be converted into StringC: readdir的d_name不能转换成String
【发布时间】:2020-12-23 23:28:36
【问题描述】:

我的代码如下:


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

int main(void) {
  DIR *myDir;
  struct dirent *myFile;

  myDir = opendir("/");
  while ((myFile = readdir(myDir)))
  {
    char myStr[256] = "foo";
    printf("%s\n", myFile->d_name);
    printf("%s\n", myStr);
  }
  closedir(myDir);
  return (0);
}

上面的代码有效。但是后来我尝试用char myStr[256] = myFile-&gt;d_name;替换char myStr[256] = "foo";,当我尝试编译时收到错误消息“error: invalid initializer”。

知道如何解决吗?看来char myStr[256]需要另选一个类型,但不知道应该选择哪个类型...

【问题讨论】:

    标签: c directory operating-system filesystems system-calls


    【解决方案1】:

    数组的初始值设定项必须是文字,它不会从变量中复制。

    要复制字符串,请使用strcpy()

    char myStr[256];
    strcpy(myStr, myFile->d_name);
    printf("%s\n", myStr);
    

    【讨论】:

    • 请注意,我可以通过使文件名超过 255 个字符来破解您的程序。
    • 我认为文件名不能超过 255 个字符。
    • 谷歌同意。不过你很幸运。也许明年他们会升级到 511!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多