你要的随意大小字符串,刚出炉,还是热的。
#include
#include
#include
#define maxsize 10
int main()
{
char *str,*strSave,cSave;
int i,n=2,strSize;
strSize=maxsize;
str=(char *)malloc(sizeof(char)*strSize);
printf("输入任意长度字符串:");
for(i=0;i{
scanf("%c",&cSave);
if(i==strSize-1)//当输入到预设内存地址最后一位
{
if(cSave=='\n')
{
cSave=0;
str[i]=cSave;
}
else
{
str[i]=0;
strSize=maxsize*n++;
strSave=str;
str=(char *)malloc(sizeof(char)*strSize);//当内存不够,增加1倍
strcpy(str,strSave);//新内存空间继承数据
str[i]=cSave;//保存新输入值
free(strSave);//释放旧内存空间
strSave=NULL;//防野指针
}
}
else
{
if(cSave=='\n')
{
cSave=0;
str[i]=cSave;
break;
}
else
{
str[i]=cSave;
}
}
}
printf("打印输入的字符串为:%s",str);
return 0;
}
“随意大小”肯定是做不到的,即使软件平台不作限制,硬件资源也是有限的。正确的理解应当是使用者的主观感觉上没有上限限制。其于这种理解,下面提供的代码能做到这一点:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
char *mygets(char *p){
int N = sizeof(int)==4 ? 262144 : 32767;
char *q;
if((q=(char *)malloc(N))==NULL){//申请一个足够大的临时空间
printf("Application memory failure...\n");
return NULL;
exit(0);
}
gets(q);
if((p=(char *)malloc(strlen(q)+1))==NULL){//按实际需要申请空间
printf("Failed to create a string...\n");
return NULL;
exit(0);
}
strcpy(p,q);
free(q);//释放临时空间
return p;
}
int main(void){
char *str=NULL;
printf("Input a string...\n");
if(!(str=mygets(str))) return 0;
printf("%s\n",str);
free(str);
return 0;
}
c语言不能实现,字符串本质上还是字符数组以‘\0’字符结尾,在分配空间时必须指定数组长度,
例如:char str[]="abcdef";
C是不可能实现的
如果你要用C实现,至少要提供一个长度参数