首页 > 解决方案 > “'char *' 的问题,但参数的类型为 'char (*)[1]'”

问题描述

FILE *fd;
char File_name[]="";
<...>
printf("Enter the name of the file where you want the results to be saved. \n");
    printf("DON'T FORGET that file must end with .exe \n");
    scanf("%s",&File_name);
    while(strchr(File_name,'.txt')==NULL)
    {
        printf("The end of the file name is not correct. Please try again. \n");
        printf("File name: ");
        scanf("%s",&File_name);
    }

警告:格式指定类型 'char ' 但参数的类型为 'char ( )[1]' [-Wformat] scanf("%s",&File_name); ~~~~^~~~~~~~~~

箭头转到“&File_name”。

如何解决?谢谢你。

标签: cwarnings

解决方案


scanf()预计. char*_%s

File_name具有类型char[1],因为它是单元素数组并且元素被初始化为'\0'.

表达式中的大多数数组都转换为指针,但其中一个例外是一元操作数&(本例)。

因此,&File_name成为指向数组的指针,其类型为char(*)[1].

要修复,请删除&s 之前的File_name。然后数组File_name将被转换为char*指向它的第一个元素。

还:

  • 1 个元素绝对太短,无法读取字符串。通过指定元素的数量来分配更多元素,例如char File_name[512] = "";.
  • '.txt'是一个多字符字符常量。它的值是实现定义的,不会是你想要的。您应该使用strstr(File_name,".txt")而不是strchr(File_name,'.txt'). (strstr用于搜索字符串(包括中间),而不是用于检查后缀,但它的行为会比strchr()) 好。

推荐阅读