#include <stdio.h> #include <stdlib.h> #include <string.h> const size_t BUFFER_LEN =128; const size_t NUM_P =3; char buffer[128]; char *pS[3]={NULL}; char *pbuffer =buffer ; int i; int main() { printf("\n You can enter up to %u message each up to %u ge ",NUM_P,BUFFER_LEN-1); for (i=0;i<NUM_P;i++) { pbuffer=buffer ; printf("\n Enter %s message ",i>0?"another":"a"); while ((pbuffer-buffer<BUFFER_LEN-1)&&(*(pbuffer++)=getchar())!='\n'); if((pbuffer-buffer)<2) break; if((pbuffer-buffer)==BUFFER_LEN&&*(pbuffer-1)!='\n') { printf("String too long "); i--; continue; } *(pbuffer-1)='\0'; pS[i]=(char*)malloc(pbuffer-buffer); if(pS[i]==NULL) { printf("\n OUT of memory "); return 1; } strcpy(pS[i],buffer); } printf("\n In reverse order .the strings you entered are :\n"); while (--i >= 0) { printf("\n%s",pS[i]); free(pS[i]); pS[i]=NULL; } system("pause"); return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> const size_t BUFFER_LEN =10; const size_t NUM_P =3; char buffer[10]; char *pS[3]={NULL}; char *pbuffer =buffer ; int i; int main() { printf("\n You can enter up to %u message each up to %u ge ",NUM_P,BUFFER_LEN-1); for (i=0;i<NUM_P;i++)//遍历指针数组 { pbuffer=buffer ;//把数组首地址给指针 printf("\n Enter %s message ",i>0?"another":"a"); while ((pbuffer-buffer<BUFFER_LEN-1)&&(*(pbuffer++)=getchar())!='\n'); /* pbuffer-buffer=0 1 pbuffer+1 pbuffer-buffer=1 2 pbuffer+1 pbuffer-buffer=BUFFER_LEN-2 BUFFER_LEN-1 pbuffer+1 pbuffer-buffer=BUFFER_LEN-1 跳出循环 */ if((pbuffer-buffer)<2) /* 检查你是否是直接按下回车,那样话,pbuffer-buffer=1 仅仅输入了一个'\n' */ { printf("zhiyou huiche yayayayaayaya"); break; } if((pbuffer-buffer)==BUFFER_LEN&&*(pbuffer-1)!='\n') { printf("String too long "); i--; continue; } *(pbuffer-1)='\0'; pS[i]=(char*)malloc(pbuffer-buffer);//分配内存,大小为当前pbuffer指向地址-buffer地址 if(pS[i]==NULL) { printf("\n OUT of memory "); return 1; } strcpy(pS[i],buffer); //把字符串复制到新内存中 } printf("\n In reverse order .the strings you entered are :\n"); while (--i >= 0) { printf("\n%s",pS[i]); free(pS[i]); pS[i]=NULL; } system("pause"); return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> const size_t BUFFER_LEN =12; const size_t NUM_P =3; char buffer[12]; char *pS[3]={NULL}; char *pbuffer =buffer ; int i; int main() { printf("\n You can enter up to %u message each up to %u ge ",NUM_P,BUFFER_LEN-1); for (i=0;i<NUM_P;i++) { pbuffer=buffer ; printf("\n Enter %s message ",i>0?"another":"a"); printf("\n@pbuffer-buffer%d\n",pbuffer-buffer); printf("\n@@pbuffer%d\n",pbuffer); printf("\n@@@pbuffer%s\n",pbuffer);//可以打印,打印的是上一次输入的字符串 while ((pbuffer-buffer<BUFFER_LEN-1)&&(*(pbuffer++)=getchar())!='\n')//在不按\n时候才自加,换句话讲,'\n'不会计数 { printf("\n>pbuffer-buffer%d\n",pbuffer-buffer); printf("\n>>pbuffer%d\n",pbuffer); printf("\n>>>pbuffer%s\n",pbuffer);//打印不出,大概是因为没有内存吧?? }; if((pbuffer-buffer)<2) break; if((pbuffer-buffer-BUFFER_LEN)&&*(pbuffer-1)!='\n') { printf("String too long "); i--; continue; } pS[i]=(char*)malloc(pbuffer-buffer); if(pS[i]==NULL) { printf("\n OUT of memory "); return 1; } strcpy(pS[i],buffer); } printf("\n In reverse order .the strings you entered are :\n"); while (--i >= 0) { printf("\n%s",pS[i]); free(pS[i]); pS[i]=NULL; } system("pause"); return 0; } /* 解决一个问题最好的办法是,提出几个假设,然后设计实验验证他,应用他 书写为了更好思考,可以整理思路 ************* 最大的恐惧正是恐惧本身。 ************** */