“问题”';字符*';但参数的类型为';字符(*)[1]'&引用; 文件*fd; 字符文件名称[]=“”; printf(“输入要保存结果的文件名。\n”); printf(“不要忘记文件必须以.exe结尾\n”); scanf(“%s”&文件名); while(strchr(文件名,'.txt')==NULL) { printf(“文件名的结尾不正确。请重试。\n”); printf(“文件名:”); scanf(“%s”&文件名); }
警告: format指定类型“char”,但参数的类型为“char()[1]”[-Wformat] scanf(“%s”&文件名); ~~~~^~~~~~~~~~ 箭头指向“&文件名” 如何修复它?谢谢。“问题”';字符*';但参数的类型为';字符(*)[1]'&引用; 文件*fd; 字符文件名称[]=“”; printf(“输入要保存结果的文件名。\n”); printf(“不要忘记文件必须以.exe结尾\n”); scanf(“%s”&文件名); while(strchr(文件名,'.txt')==NULL) { printf(“文件名的结尾不正确。请重试。\n”); printf(“文件名:”); scanf(“%s”&文件名); },c,warnings,C,Warnings,警告: format指定类型“char”,但参数的类型为“char()[1]”[-Wformat] scanf(“%s”&文件名); ~~~~^~~~~~~~~~ 箭头指向“&文件名” 如何修复它?谢谢。scanf()希望char*用于%s 文件名的类型为char[1],因为它是一个元素数组,并且元素初始化为'\0' 表达式中的大多数数组都转换为指针,但其中一个例外是一元操作数&(本例) 因此,&File\u name成为指向数组的指针,其类型为char(*)[1] 要修复此问题,请删除文件名之
scanf()
希望char*
用于%s
文件名
的类型为char[1]
,因为它是一个元素数组,并且元素初始化为'\0'
表达式中的大多数数组都转换为指针,但其中一个例外是一元操作数&
(本例)
因此,&File\u name
成为指向数组的指针,其类型为char(*)[1]
要修复此问题,请删除文件名
之前的&
s。然后数组文件名
将转换为指向其第一个元素的字符*
此外:
- 1元素绝对太短,无法读取字符串。通过指定元素数量分配更多元素,如
char File_name[512]=“”代码>
是一个多字符常量。它的价值是实现定义的,而不是您想要的。您应该使用'.txt'
而不是strstrstr(文件名“.txt”)
。(strhr(文件名“.txt”)
用于搜索字符串(包括中间字符串),不用于检查后缀,但其性能优于strstr
)strhr()
char文件名[]=”代码>不够大,无法输入任何内容。它是一个长度为1
的数组,只能容纳nul字符串终止符。编译器说scanf(“%s”,&File\u name)代码>应该是scanf(“%s”,文件名)代码>传递给函数的数组衰减为指针,因此不需要间接寻址。但我有空字符,用户写入文件名,程序应该以某种方式将保存的文件名放入字符中。或者你有其他想法。编译器说“boohoo这行代码不好:scanf(“%s”和&File_name);
具体来说,错误就在这里
”。2.专注地盯着那条线。它真的会像编译器说的那样糟糕吗?3.实际上,您不需要理解编译器错误意味着什么,就可以找到另一个&
错误。有一个箭头为您指出了这个bug,它能有多明显?&File\u name
=>File\u name
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);
}