Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式‘;%c’;应为类型为‘;字符*’;,但参数2的类型为‘;字符(*)[0]’;_C_Arrays - Fatal编程技术网

格式‘;%c’;应为类型为‘;字符*’;,但参数2的类型为‘;字符(*)[0]’;

格式‘;%c’;应为类型为‘;字符*’;,但参数2的类型为‘;字符(*)[0]’;,c,arrays,C,Arrays,我想创建一个程序,在这个程序中,你可以输入,它可以根据输入给出输出,但是我在输入部分遇到了一些问题。我首先创建了一个未初始化的字符串,并希望将输入存储在其中。但当我编译时,它显示了以下错误: 格式“%c”要求参数类型为“char*”,但参数2的类型为“char(*)[0]” 我在网上查过了,但没有找到关于如何解决这个问题的答案 我的代码如下(C): #包括 #包括 int main(){ 字符字符串[]=“”; scanf(“%c”和字符串)(&string); } &string是指向数组的指

我想创建一个程序,在这个程序中,你可以输入,它可以根据输入给出输出,但是我在输入部分遇到了一些问题。我首先创建了一个未初始化的字符串,并希望将输入存储在其中。但当我编译时,它显示了以下错误:

格式“%c”要求参数类型为“char*”,但参数2的类型为“char(*)[0]”

我在网上查过了,但没有找到关于如何解决这个问题的答案

我的代码如下(C):

#包括
#包括
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@Joseph
fgets(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