69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main(void) {
//输入字符串的最大长度
const size_t BUFFER_LEN= 5;
//输入字符串的行数
const size_t NUM_P= 5;
//字符串数组
//字符串指针
char *pS [100] = { NULL };
//指针指向字符串数组
int i=0;
//你可以输入多少条消息,每条消息多少个字符
printf("\n You can enter up to %u messages each up to %u characters.",
NUM_P,BUFFER_LEN-1);
//在for循环中处理输入的字符
for(i=0;i<NUM_P;i++){
char buffer[BUFFER_LEN];
char *pbuffer=buffer;
//初始化数组指针
pbuffer=buffer;
//第一次是a,以后每次another
printf("\nEnter %s message,or press Enter to end\n",i>0?"another":"a");
//数组指针的偏移量小于数组长度大小减一,并输入的字符不能是'\n'
while((pbuffer-buffer<BUFFER_LEN-1)){
// int i=pbuffer-buffer;
if((*pbuffer++=getchar())!='\n'){
// if((*pbuffer=getchar())!='\n'){
// *pbuffer++;
}else
break;
}
//空行跳过
if((pbuffer-buffer)<2)
break;
//最后一个字符不是'\n',输出字符串太长了,只允许最大BUFFER_LEN长度
if((pbuffer-buffer)==BUFFER_LEN && *(pbuffer)!='\n'){
printf("String too long - maximum %d characters allowed.",BUFFER_LEN);
i--;
continue;
}
//用结束位替代最后一个字符
*(pbuffer)='\0';
//给pS[i]分配空间
pS[i] = (char*)malloc(pbuffer-buffer);
//如果指针ps[i]为NULL,说明内存溢出
if(pS[i]==NULL){
printf("\nOut of memory - ending program");
return 1;
}
//把ps[i]指针指向buffer的值。
strcpy(pS[i],buffer);
}
printf("\nIn reverse order, the strings you entered are:\n");
//循环打印ps[i]
while(--i>=0){
printf("\n%s",pS[i]);
free(pS[i]);
pS[i]=NULL;
}
return 0;
}