c - “'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”。
如何解决?谢谢你。
解决方案
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()
) 好。
推荐阅读
- prolog - Prolog(CLP)的可变装箱问题
- xml - Postgres XML 解析节点名
- azure-databricks - 有没有办法在 Azure Databricks 中恢复已删除的数据?
- javascript - Threejs 模型加载:“CORS 策略已阻止从源‘null’访问 XMLHttpRequest ..”-如何在本地进行测试?还是简单上传?
- .net - 发布请求期间出现角度 ERR_CONNECTION_REFUSED 错误
- amazon-web-services - 可通过 Internet 访问的可公开访问的 RDS 和 Lambda
- amazon-web-services - terraform 模块 - 如何将策略放入变量中
- c# - 如何获取 PostgreSQL 服务器上每个数据库的大小
- django - 使用 Django urls.py 配置 React(构建)routes.js
- c++ - Maya API:如何解决这些未解决的外部符号问题?