使用指针在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 }