在Xcode上打开功能C“找不到文件”但终端工作

时间:2015-02-18 13:53:58

标签: c xcode xcode6

我在Xcode上工作,我有一个简单的函数,可以在C中使用open打开文件。

 void mfs_workwith() {
  char *token, *temp_token;
  char *search = ".";
  temp_token = (char*)malloc(sizeof(char)*strlen(cc[1]));
  strcpy(temp_token, cc[1]);
  if ((token = strtok(temp_token, search)) == NULL) {
    printf("mfs_workwith command is only used with mfs type files e.g. example.mfs \n");
  } else if ((token = strtok(NULL, " \n\0")) == NULL) {
    printf("mfs_workwith command is only used with mfs type files e.g. example.mfs \n");
  } else if (strcmp(token, "mfs") == 0) {
    filename = malloc(sizeof(char)*strlen(cc[1]));
    strcpy(filename, cc[1]);
    if ((file_mfs = open(filename, O_RDWR)) == -1) {
      perror("open error");
    } else {
      printf("open successful \n");
    }
  }
}

文件的名称存储在全局数组中,然后复制到本地缓冲区中以进行标记化并检查它是否具有正确的格式(.mfs)。

然后如果一切正常,我会复制一份文件名,然后用它来open

我的问题是,当我在终端中运行我的程序时运行正常,打印open successful然后继续。但是当我尝试在Xcode中运行它时会出现此错误:

No such file or directory

我提供输入file.mfs,它是同一目录中文件的名称。

我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:1)

感谢iharob的评论,我发现了这个问题。看起来xcode很难打开相对路径,因为它在运行程序时使用了不同的文件。这里有一个相对的讨论:

Open method opens files with full path only C++

再次感谢所有人。

答案 1 :(得分:0)

此:

filename = malloc(sizeof(char)*strlen(cc[1]));
strcpy(filename, cc[1]);

被破坏,它无法为字符串的终结符分配空间,因此会导致缓冲区溢出和未定义的行为。

此外,您永远不需要按sizeof (char)进行缩放,这始终为1.应该是:

filename = malloc(strlen(cc[1]) + 1);
strpcy(filename, cc[1]);

或者,如果你有,只需:

filename = strdup(cc[1]);