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