“'char *' 但参数的类型为 'char (*)[1]'” 的问题
Problem with " 'char *' but the argument has type '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);
}
警告:
format 指定类型 'char ' 但参数的类型为 'char ()[1]' [-Wformat]
scanf("%s",&File_name);
~~~~^~~~~~~~~~
箭头指向“&File_name”。
如何解决?谢谢。
scanf()
预计 char*
为 %s
。
File_name
具有类型 char[1]
因为它是 one-element 数组并且元素被初始化为 '[=15=]'
.
表达式中的大多数数组都会转换为指针,但其中一个例外是一元操作数&
(本例)。
因此,&File_name
成为指向数组的指针,其类型为char(*)[1]
。
要修复,删除 File_name
之前的 &
。然后数组 File_name
将被转换为 char*
指向它的第一个元素。
还有:
- 1 个元素绝对太短,无法读取字符串。通过指定元素数量来分配更多元素,例如
char File_name[512] = "";
.
'.txt'
是一个 multi-character 字符常量。它的值为implementation-defined,不会是你想要的。您应该使用 strstr(File_name,".txt")
而不是 strchr(File_name,'.txt')
。 (strstr
用于搜索字符串(包括中间),而不是用于检查后缀,但它比 strchr()
表现更好。
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);
}
警告: format 指定类型 'char ' 但参数的类型为 'char ()[1]' [-Wformat] scanf("%s",&File_name); ~~~~^~~~~~~~~~
箭头指向“&File_name”。
如何解决?谢谢。
scanf()
预计 char*
为 %s
。
File_name
具有类型 char[1]
因为它是 one-element 数组并且元素被初始化为 '[=15=]'
.
表达式中的大多数数组都会转换为指针,但其中一个例外是一元操作数&
(本例)。
因此,&File_name
成为指向数组的指针,其类型为char(*)[1]
。
要修复,删除 File_name
之前的 &
。然后数组 File_name
将被转换为 char*
指向它的第一个元素。
还有:
- 1 个元素绝对太短,无法读取字符串。通过指定元素数量来分配更多元素,例如
char File_name[512] = "";
. '.txt'
是一个 multi-character 字符常量。它的值为implementation-defined,不会是你想要的。您应该使用strstr(File_name,".txt")
而不是strchr(File_name,'.txt')
。 (strstr
用于搜索字符串(包括中间),而不是用于检查后缀,但它比strchr()
表现更好。