请问如何建立字符串类型

lonelybug 2003-07-06 10:59:50
如何实现string这种变量类型呢!?
我用char *str
然后再用malloc的方法好像不能动态改变指针所指向内存的大小,如何做才能像stirng类型的变量一样可以输入任意多的字符呢!?
...全文
35 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
idontlikenickname 2003-07-06
  • 打赏
  • 举报
回复


使用realloc()函数实现动态分配,因为realloc()在扩大缓冲的同时不改变原来缓冲的内容.
下边的程序中pBuffer指向的缓冲区的长度随着你输入而增加,同时会有变量记录缓冲区的长度,输入回车时结束~

#include <conio.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>

void main()
{
char *pBuffer; // 存储缓冲区.
char ch; // 存放输入字符.
int nLen; // 记录缓冲区长度.

// 先分配一个字节.
nLen = 0;
pBuffer = (char *)malloc((nLen + 1) * sizeof(char));
if(!pBuffer)
{
printf("malloc() failed.\n");
exit(1);
}

// 开始输入.
printf("Input a string(Enter to exit):");
do{
// 接收键盘输入并回显.
ch = getche();
// 不是回车则调整缓冲区大小并记录输入字符,否则结束输入.
if(ch != 13)
{
char *p;

*(pBuffer + nLen) = ch;
nLen ++;
p = (char *)realloc(pBuffer, (nLen + 1) * sizeof(char));
if(!p)
{
printf("realloc() failed.\n");
free(pBuffer);
exit(1);
}
pBuffer = p;
}
else
{
*(pBuffer + nLen) = '\0';
break;
}
}while(1);
// 显示输入结果和缓冲区长度.
printf("String:%s", pBuffer);
printf("Len:%d", nLen);
// 释放缓冲空间.
free(pBuffer);
}

pengzhenwanli 2003-07-06
  • 打赏
  • 举报
回复
其实malloc可以动态改变
关于string 的实现,你可以看STL的源代码
bigtea 2003-07-06
  • 打赏
  • 举报
回复
预空间足够,其实其他语言中的string变量也是有范围限制的,只不过一般都够用而已。
象在C中
main()
{
char * str;

str=(char *)malloc(100*sizeof(char));
scanf("%s",str);
printf("%s",str);
}
其实也相当于定义了一个string 变量(最大为100个字符),这个变量定义的内存区域由str指针指向。
一个变量实际就是一块具体物理存储单元的别名。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧