
用C语言如何从终端读入一个无限长度的字符串?
7个回答
展开全部
“无限长度”肯定做不到,但可以实现在软、硬件资源支持的前提下,输入一个实际大小的字符串。可以这么做,看代码:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
char *getstr(char *p){
unsigned N = sizeof(int)==4 ? 0xFFFFFF : 0xFFFF;
char *q=(char *)malloc(N);
if(!q){
printf("Failure to apply for a temporary space...\n");
return NULL;
}
gets(q);
if((p=(char *)malloc(strlen(q)+1))==NULL){
printf("Apply for actual use of space to fail...\n");
return NULL;
}
strcpy(p,q);
free(q);
return p;
}
int main(void){
char *str=NULL;
printf("Please input a string...\n");
str=getstr(str);
printf("%s\n",str);
free(str);
return 0;
}
展开全部
C语言没有String类,可以用链表或者动态分配
#include<stdio.h>
#include<stdlib.h>
int main()
{
char c,*str,*p=(char*)malloc(sizeof(char));
int n=0,i;
while((c=getchar())!='\n')
{
if(n)free(str);
str=(char*)calloc(n+1,sizeof(char));
str[n]=c;
for(i=0;i<n;i++)str[i]=p[i];
free(p);
p=(char*)calloc(n+1,sizeof(char));
for(i=0;i<n+1;i++)p[i]=str[i];
n++;
}
p[n]=0;
puts(p);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用指针 char *p;gets(p);或者用动态分配函数malloc或calloc
追问
具体怎样做?能不能给个源代码?
追答
#include
#include
void main()
{
char *p;
gets(p);//这指令其实系统就已经默认为p分配一块内存了
puts(p);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include "string.h"
void main()
{char c;
while(22)//无终止,不断执行scanf()函数
{
scanf("%c",&c);
}
}
#include "string.h"
void main()
{char c;
while(22)//无终止,不断执行scanf()函数
{
scanf("%c",&c);
}
}
追问
且不说不是字符串,好歹也要有终止条件吧?
追答
#include
#include "string.h"
void main()
{char c;
while(22)//无终止,不断执行scanf()函数
{
scanf("%c",&c);
if(c=='#') break;//输入#是停止输入
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
读取一些字符,保存进文件,然后再接收再保存进文件……
追问
我是要像用scanf()一样只用一次回车录入
追答
好办,申请堆内存,这个内存足够大,如100M,录入完之后看看实际输入多少,按着实际输入的,再申请那么大,放在新申请的里面,然后释放100M,然后你怎么处理这个字符串都行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |