我正在使用Pelles C ide而我正在学习C,我以为我知道%c是printf()中char的格式说明符,但它认为我正在尝试使用int?我该如何纠正这个问题。
以下是代码:
#include <stdio.h>
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %c", z);
printf(" %c", m);
printf(" %c", k);
printf(" %c", o);
printf(" %c", l);
printf(" %c", e);
return 0;
}
以下是错误:
答案 0 :(得分:3)
您应该使用字符串说明符来输出字符串。
printf("%s", z);
答案 1 :(得分:2)
%c
表示 int
参数转换为unsigned char
,结果字符为。对于int
以外的其他类型(包括提升为int
的类型),行为未定义。
要打印字符串,请使用%s
:
printf(" %s", z);
答案 2 :(得分:1)
根据定义,您的变量 z 是一个指向char数组的指针。
尝试
printf(" %c", *z);
打印 z 指向的第一个字符。
如果要打印所有字符,请将其视为一个字符串(指向具有终止NUL字符'\ 0'的字符数组的指针.NUL字符由于您的字符串被包含在双精度中而自动添加引号。
尝试
printf(" %s", z);
答案 3 :(得分:1)
printf(" %c", z);
z
是一个字符串,不是字符串(字符串是字符数组),我认为您正在尝试执行此操作printf(" %c", '\n');
或此{{1} }(printf(" %s", z);
是输出字符串的正确格式说明符)
答案 4 :(得分:0)
调用函数时,'char'作为'int'传递。但是你将指针传递给'char',这根本不是一回事。错误消息抱怨它看到一个指针。在你的情况下,因为你想打印一个字符串而不是一个'char',你的格式是错误的;使用%s代替。
答案 5 :(得分:0)
实际上,如果你想要%c,请将变量定义为字符常量:
char c = ' ';
char d = '\n';
依此类推。
答案 6 :(得分:0)
创建数组时,数组变量的名称(如代码z,m,k,o,l,e)实际上保存数组的基址(即第0个索引的地址)你的阵列)因此,当您尝试打印z,m,k,o,l,e的值时,它们将返回相应数组的基址。您可以通过以下代码进行检查:
#include <stdio.h>
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %d", z);
printf(" %d", m);
printf(" %d", k);
printf(" %d", o);
printf(" %d", l);
printf(" %d", e);
return 0;
}
上述代码不会显示任何错误,并会打印相应数组的基址。
为了更清楚,您可以尝试以下代码:
#include <stdio.h>
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %c", &z);
printf(" %c", &m);
printf(" %c", &k);
printf(" %c", &o);
printf(" %c", &l);
printf(" %c", &e);
return 0;
}
上面的代码再次不会显示任何错误,并将打印相应数组的第一个字符。我希望它能让你明白为什么你的代码显示错误。
现在,当您使用%s和数组名称时,它将获取数组的基址,并将从该地址打印整个字符串,直到找到null,如下所示。 :
#include <stdio.h>
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %s", z);
printf(" %s", m);
printf(" %s", k);
printf(" %s", o);
printf(" %s", l);
printf(" %s", e);
return 0;
}
并且,如果要在char数组的特定索引处打印特定字符,则可以尝试使用以下代码:
#include
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %c", z[indexValue]);
printf(" %c", m[indexValue]);
printf(" %c", k[indexValue]);
printf(" %c", o[indexValue]);
printf(" %c", l[indexValue]);
printf(" %c", e[indexValue]);
return 0;
}