我想创建一个程序,在该程序中您将提供输入,并根据输入提供输出,但是我在输入部分遇到了一些麻烦。我首先创建了一个未初始化的字符串,并希望将输入存储在其中。但是当我编译时,它显示此错误:
格式为'%c'的参数应为'char *'类型,而参数2的类型为'char(*)[0]'
我已经上网了,但是无法获得解决方法。
到目前为止我的代码(在C中):
#include <stdio.h>
#include <stdlib.h>
int main() {
char string[] = "";
scanf("%c", &string);
}
答案 0 :(得分:4)
&string
是指向数组的指针,仅传递string
就足够了。 string
的长度为1,可以容纳单个字符,但是请勿尝试将其解释为字符串,因为它不会以空字符结尾。
#include <stdio.h>
#include <stdlib.h>
int main() {
char string[] = "";
scanf("%c", string);
}
或者,您可以执行此操作。它是等效的,有人说它更具可读性。
int main() {
char string[] = "";
scanf("%c", &string[0]);
}
答案 1 :(得分: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;
}
答案 2 :(得分:-1)
关于;
scanf("%c", &string);
变量string
是一个数组。在C语言中,对数组的“裸”引用会降级为数组第一个字节的地址。因此,对scanf()
参数&string
的调用要求一个地址的地址。
通常,编译器将输出警告(如您所见),但会生成正确的代码。为避免此问题,当参数是对数组的“裸”引用时,请从参数中删除&
。 I.E。
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_FAILURE都在头文件stdlib.h