初学指针,关于输出的问题
程序代码:
//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)?
预谢。