读取不定长字符串

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

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

1.何时结束循环输入

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

2.存放问题

  当使用scanf作为输入时,存放在char*中,需要使用malloc()分配空间,如果需要读入不定长字符串,则需要一个中间char*作为中转存储。
  
char* str1
char* 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;
}






评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值