使用指针在c中打印字符串

时间:2013-12-05 08:48:30

标签: c string

我只是在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”!我在这做错了什么?

8 个答案:

答案 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)

C字符串中的

存储为字符数组,并以零值终止,因此称为以零结尾的字符串。顺便说一句,这就是为什么你必须为你的真实字符制作4的数组大小。

在您的示例中,您将每个char的指针传递给printf函数,printf将指针中的字符串打印到下一个空值。第一遍打印“hia”,第二遍ia和第三个a。

要在每次传递中打印一个字符,您必须使用

printf ("%c", c[i]);