【问题标题】:C Pointers and Arrays Incompatible TypesC 指针和数组不兼容的类型
【发布时间】:2012-09-22 19:55:40
【问题描述】:

所以我想知道为什么我不能这样做。

int main(int argc, char **argv){

    FILE *src;
    char filePath[261];
    filePath = argv[1];

最后一行是编译器错误。 char[] 和 char* 有什么区别?我将如何修复此代码,以便我可以将 filePath 设置为等于 argv[1]。 提前致谢。

【问题讨论】:

标签: c arrays pointers types


【解决方案1】:

使用

strcpy(filePath, argv[1]);

并快乐地生活。不要忘记检查 argv[1] 是否为 NULL,并且不要忘记查看 argc 是否 > 1。

您的filePath 变量是一个固定大小的数组,分配在堆栈上,而 argv[i] 是指向堆中某些内存的指针。无法赋值给filePath,因为filePath不是指针,而是数据本身。

【讨论】:

    【解决方案2】:

    因为filePath是一个数组,在C语言中不允许修改数组的地址。 您可以使用string family 复制字符串。

    【讨论】:

      【解决方案3】:

      你需要:

      FILE *src;
      char *filePath;
      filePath = argv[1];
      

      因为filePath 必须指向 到 argv,而不是 261 字节的数组。如果需要,您可以将参数i 复制到数组中:

      FILE *src;
      char filePath[261];
      strcpy(filePath, argv[1]);
      

      或更好,以避免复制比您可用的更多字节的风险(这将导致灾难):

      FILE *src;
      char filePath[261];
      strncpy(filePath, argv[1], sizeof(filePath));
      

      或再次

      #define MAX_FILESIZE    261
      
      FILE *src;
      char filePath[MAX_FILESIZE];
      strncpy(filePath, argv[1], MAX_FILESIZE);
      

      【讨论】:

        【解决方案4】:

        问:char[] 和 char* 有什么区别?

        答:很多时候,您可以互换使用它们。

        但是在这里,您“尝试将数组名称用作左值”:)

        这里有一个很好的解释:

        以下是“什么是合法的,什么是不合法的”的简短摘要:

        【讨论】:

          猜你喜欢
          • 2013-11-06
          • 1970-01-01
          • 1970-01-01
          • 2016-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-26
          • 2021-11-23
          相关资源
          最近更新 更多