读取不定长字符串

来源:互联网 发布:excel做数据分析好吗 编辑:程序博客网 时间:2024/06/06 03:17

C语言中通常使用scanf读取输入,但如果需要给一个char* 读取字符串,则需要使用malloc()预先分配空间,但是因为实现并不知道需要输入的字符串长度,所以可能因为分配的空间不足产生溢出。

读取单个字符使用getchar(),可通过它实现不定长字符串的输入。

1.何时结束循环输入

 当输入时,按下回车键,输入缓冲区中除了字符串,还有一个换行符\n,因此当getchar()读到换行符时,就结束,但是字符串以\0结尾,因此需要额外加入结尾符。

2.存放问题

  当使用scanf作为输入时,存放在char*中,需要使用malloc()分配空间,如果需要读入不定长字符串,则需要一个中间char*作为中转存储。
  
char* str1char* str2
 给其中一个分配空间,其中需要存储\0,同时需要一个变量记录输入字符个数。
int i=1;str=(char*)malloc(sizeof(char)*(i+1))
将读取的字符存入
str[i-1]=getchar()
每次输入一个字符,则变量i加一,同时str2分配空间,存放str1中的内容,释放str1,在申请空间,存放数据,并再次将str2的内容放回。

char* getstr(){      char* str1;      char* str2;             //str2作为中转存储使用      int i=1;      str1=(char*)malloc(sizeof(char)*(i+1));      while('\n'!=(str[i-1]=getchar()))      {              i++;              str2=(char*)malloc(strlen(str1)+1));              str1[i-1]='\0';              strcpy(str2,str1);              free(str1);              str1=(char*)malloc(sizeof(char)*(i+1));              if(NULL==str)              //判断是否申请成功,失败需要释放内存              {                   free(str2);                   return NULL;              }              strcpy(str1,str2);              free(str2);       }       str1[i-1]='\0';             //字符串结尾符       return str1;}





0 0
原创粉丝点击