格式‘;%c’;应为类型为‘;字符*’;,但参数2的类型为‘;字符(*)[0]’;
我想创建一个程序,在这个程序中,你可以输入,它可以根据输入给出输出,但是我在输入部分遇到了一些问题。我首先创建了一个未初始化的字符串,并希望将输入存储在其中。但当我编译时,它显示了以下错误: 格式“%c”要求参数类型为“char*”,但参数2的类型为“char(*)[0]” 我在网上查过了,但没有找到关于如何解决这个问题的答案 我的代码如下(C):格式‘;%c’;应为类型为‘;字符*’;,但参数2的类型为‘;字符(*)[0]’;,c,arrays,C,Arrays,我想创建一个程序,在这个程序中,你可以输入,它可以根据输入给出输出,但是我在输入部分遇到了一些问题。我首先创建了一个未初始化的字符串,并希望将输入存储在其中。但当我编译时,它显示了以下错误: 格式“%c”要求参数类型为“char*”,但参数2的类型为“char(*)[0]” 我在网上查过了,但没有找到关于如何解决这个问题的答案 我的代码如下(C): #包括 #包括 int main(){ 字符字符串[]=“”; scanf(“%c”和字符串)(&string); } &string是指向数组的指
#包括
#包括
int main(){
字符字符串[]=“”;
scanf(“%c”和字符串)(&string);
}
&string
是指向数组的指针,只需传递string
就足够了<代码>字符串的长度为1,将适合单个字符,但不要尝试将其解释为字符串,因为它不会以null结尾
#include <stdio.h>
#include <stdlib.h>
int main() {
char string[] = "";
scanf("%c", string);
}
&string
是指向数组的指针,只需传递string
就足够了<代码>字符串的长度为1,将适合单个字符,但不要尝试将其解释为字符串,因为它不会以null结尾
#include <stdio.h>
#include <stdlib.h>
int main() {
char string[] = "";
scanf("%c", string);
}
您的问题陈述是“我想创建一个程序,您可以在其中提供输入,它可以根据输入提供输出”
您可以尝试以下方法:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 50
int main(){
char string[MAX_LEN+1];
//fgets is safe & would read whitespaces
fgets(string, MAX_LEN, stdin);
printf("%s", string);
return 0;
}
#包括
#包括
#定义最大长度50
int main(){
字符字符串[MAX_LEN+1];
//fgets是安全的&可以读取空白
fgets(字符串、最大长度、标准长度);
printf(“%s”,字符串);
返回0;
}
您的问题陈述是“我想创建一个程序,您可以在其中输入信息,它可以根据输入信息给出输出”
您可以尝试以下方法:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 50
int main(){
char string[MAX_LEN+1];
//fgets is safe & would read whitespaces
fgets(string, MAX_LEN, stdin);
printf("%s", string);
return 0;
}
#包括
#包括
#定义最大长度50
int main(){
字符字符串[MAX_LEN+1];
//fgets是安全的&可以读取空白
fgets(字符串、最大长度、标准长度);
printf(“%s”,字符串);
返回0;
}
关于
scanf("%c", &string);
变量字符串
是一个数组。在C语言中,对数组的“裸”引用降级为数组第一个字节的地址。因此,对scanf()
参数&string
的调用要求一个地址的地址
通常编译器会输出警告(如您所见),但会生成正确的代码。为避免此问题,当参数是对数组的“裸”引用时,请从参数中删除&
。即
scanf("%c", string);
更好的方法是使用:
scanf("%c", &string[0]);
对于健壮的代码,请始终检查任何scanf()
函数系列的返回值。通常,它们返回成功输入格式转换说明符的数量。因此,更好的例子是
if( scanf("%c", &string[0]) != 1 )
{
fprintf( stderr, "scanf for first char of array -string- failed" );
}
这种错误(通常)是不可恢复的,因此通常代码是:
if( scanf("%c", &string[0]) != 1 )
{
fprintf( stderr, "scanf for first char of array -string- failed" );
exit( EXIT_FAILURE );
}
其中exit()
和exit_失败都暴露在头文件中:stdlib.h
关于
scanf("%c", &string);
变量字符串
是一个数组。在C语言中,对数组的“裸”引用降级为数组第一个字节的地址。因此,对scanf()
参数&string
的调用要求一个地址的地址
通常编译器会输出警告(如您所见),但会生成正确的代码。为避免此问题,当参数是对数组的“裸”引用时,请从参数中删除&
。即
scanf("%c", string);
更好的方法是使用:
scanf("%c", &string[0]);
对于健壮的代码,请始终检查任何scanf()
函数系列的返回值。通常,它们返回成功输入格式转换说明符的数量。因此,更好的例子是
if( scanf("%c", &string[0]) != 1 )
{
fprintf( stderr, "scanf for first char of array -string- failed" );
}
这种错误(通常)是不可恢复的,因此通常代码是:
if( scanf("%c", &string[0]) != 1 )
{
fprintf( stderr, "scanf for first char of array -string- failed" );
exit( EXIT_FAILURE );
}
头文件中同时显示了
exit()
和exit\u失败:stdlib.h
您使用的编译器是什么?gcc和clang都说char(*)[1]
,而不是char(*)[0]
。您确定不想要%s
?在任何情况下,请注意声明的string
变量的大小仅为1字节,因此无法存储除空字符串以外的任何有效字符串。您不应该收到此代码的消息,请检查您是否正在编译您发布的内容我使用的编译器是gcc@JosephWhat编译器您使用的是什么?gcc和clang都说char(*)[1]
,而不是char(*)[0]
。您确定不想要%s
?在任何情况下,请注意声明的string
变量的大小仅为1字节,因此无法存储除空字符串以外的任何有效字符串。您不应该收到此代码的消息,请检查您是否正在编译您发布的内容。我使用的编译器是gcc@Josephfgets(string,MAX_LEN,stdin)
-->fgets(字符串,字符串大小,标准格式)
。fgets()
函数读取的值最多比指定的最大值少一个,为\0
终止符留出空间。fgets(string,MAX\u LEN,stdin)
-->fgets(string,sizeof string,stdin)
。fgets()
函数读取的数据最多比指定的最大值少一个,为\0
终止符留出了空间。“调用scanf()
参数&string
是询问地址的地址”——在C中,数组表达式衰减为指向第一个元素(而不是第一个字节)的指针大多数表达式中的数组,但不是一元&
地址运算符的操作数(或sizeof
的操作数,或用于初始化另一个数组的字符串文字)。因此,&string
获取string[]
(数组)的地址,而不是指向第一个元素的指针的地址。错误消息对此进行了投诉,参数2的类型为“char(*)[0]”@exnihilo,请联系usab