初学指针,关于输出的问题
程序代码://program 7.12 arrays of pointers to string
#include <stdio.h>
const size_t BUFFER_LEN = 512;
int main(void)
{
char buffer[BUFFER_LEN];
char *pS[3] = { NULL };
char *pbuffer = buffer; /*起始位置指针*/
size_t index = 0; /*存储字符计数*/
printf("\nEnter 3 messages that total less than %u characters. ",BUFFER_LEN-2);
printf("%d %d", *pbuffer,pbuffer);
for(int i=0; i<3; i++)
{
printf("\nEnter %s message\n", i>0? "another" : "a");
pS[i] = &buffer[index];/* 指向每段语句的开头*/
for(; index<BUFFER_LEN; index++) /*遍历512个字节*/
if((*(pbuffer+index) = getchar()) == '\n')
{
*(pbuffer+index++) = '\0';
break;
}
if((index == BUFFER_LEN) && ((*(pbuffer+index-1) != '\0') || (i<2)))/*i<2 是在防止什么情况?*/
{
printf("\nYou ran out of space in the buffer.");
return 1;
}
}
printf("\nThe strings you entered are:\n\n");
for(int i=0; i<3; i++)
printf("%s\n", pS[i]);/*为什么只是一个开头地址输出了这么多*/
printf("The buffer has %d characters unsed.\n",BUFFER_LEN-index);
return 0;
}由于是看书自学,可能从原理认识上就有错误,求多多指点。这是书中一个例子,指针数组。注释是根据自己理解写的。
有两个问题没有想通:
1,第二个if()中 ||i<2 是在防止什么情况发生?
2,pS[i] = &buffer[index]分别用三个元素存储了三个字符串的 开头 地址,但为什么之后使用printf()输出,不是只输出了地址存储的单个字符,而是输出了整个字符串(到\0)?
预谢。








