我只是在C中打印一些字符。 我已经声明了char c并分配了它的字符。 然后使用for循环我尝试逐个打印字符。 我当然使用了指针。
#include <stdio.h>
#include <string.h>
int main()
{
char c[4] = {"hia"};
int i;
for(i=0;i<4;i++)
{
printf(&c[i]);
}
return 0;
}
然而,当我使用turbo编译我的代码时,我得到输出“hiaiaa”而不是“hia”!我在这做错了什么?
答案 0 :(得分:3)
您的printf()
来电已被破坏。您正在使用字符串(从您指定的点)作为格式字符串。这不会打印单个字符。而是每个调用将从其格式化字符串开始的位置打印到字符串的结尾。
这意味着第一个调用将打印所有c
,下一个将从c[1]
开始打印,依此类推。根本不是你想要的。
如果要打印单个字符,请使用%c
格式说明符:
printf("%c", c[i]);
无需指针,因为字符按值传递给printf()
。
答案 1 :(得分:1)
printf
函数有一个char*
作为第一个参数,这是正确的。但是,它会打印一个字符串(即char
的零终止序列),因此它始终会这样做。
如果您想一次打印一个字符,则必须使用该格式,例如:
printf("%c\n", c[i]);
您还有另一个问题,那就是您也尝试打印零终止符。此字符不可打印,因此不会显示。使用例如i < strlen(c)
作为克服此问题的循环条件。
此外,不是逐个字符打印,而是将它们全部打印为一个字符串:
printf("%s\n", c);
答案 2 :(得分:1)
这就是你的循环中发生的事情:
0. hia
1. ia
2. a
3. \0
但是,您希望一次只打印一个char
,而不是空终止string
,因此您应该将其作为char
传递而不是char*
:< / p>
printf( "%c", c[i] )
此外,您循环四次,但字符串长度只有三次。你应该使用:
for( i = 0; i < strlen( c ); i++ )
...
答案 3 :(得分:1)
1)对于循环大小,i <3,而不是i <4(i = 3指的是字符串末尾的空字符)
2)使用printf(“%c”,c [i]);
答案 4 :(得分:0)
您所看到的内容的说明:在每个循环中,printf
正在打印以null结尾的字符串。这个字符串在数组中稍后的一个char中的每个循环中开始。
如何做,取决于你的意图。如果要通过指针打印字符串char,可以使用:
char *p=&c[0];
while (*p) {
printf("%c", *p);
p++;
}
答案 5 :(得分:0)
您的循环将使用以下参数调用printf
:
printf("hia"); // first loop iteration
printf("ia"); // second loop iteration
printf("a"); // third loop iteration
printf(""); // fourth loop iteration
您可能打算一次打印一个字符:
for(i=0;i<3;i++) // No need to print the string termination character.
{
printf("%c", c[i]); // "%c" is the printf format code to print a single character
}
答案 6 :(得分:0)
您的问题是使用指针打印字符串。你可以用
printf("%s", c);
或逐个字符(包括库 string.h )
for(i=0;i<strlen(c);i++)
{
printf("%c", c[i]);
}
答案 7 :(得分:0)
存储为字符数组,并以零值终止,因此称为以零结尾的字符串。顺便说一句,这就是为什么你必须为你的真实字符制作4的数组大小。
在您的示例中,您将每个char的指针传递给printf函数,printf将指针中的字符串打印到下一个空值。第一遍打印“hia”,第二遍ia和第三个a。
要在每次传递中打印一个字符,您必须使用
printf ("%c", c[i]);