用C语言如何从终端读入一个无限长度的字符串?

 我来答
White_MouseYBZ
推荐于2017-09-05 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:7300万
展开全部

“无限长度”肯定做不到,但可以实现在软、硬件资源支持的前提下,输入一个实际大小的字符串。可以这么做,看代码:

//#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;
}
Rankabc
2014-04-13 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1155万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Honor_LGB
2014-04-13
知道答主
回答量:7
采纳率:0%
帮助的人:6.1万
展开全部
用指针 char *p;gets(p);或者用动态分配函数malloc或calloc
追问
具体怎样做?能不能给个源代码?
追答
#include
#include
void main()
{
char *p;
gets(p);//这指令其实系统就已经默认为p分配一块内存了
puts(p);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
别急_等你92
2014-04-13 · TA获得超过115个赞
知道答主
回答量:128
采纳率:0%
帮助的人:72.7万
展开全部
#include <stdio.h>
#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;//输入#是停止输入
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28e9be2
2014-04-13 · TA获得超过609个赞
知道小有建树答主
回答量:499
采纳率:100%
帮助的人:624万
展开全部
读取一些字符,保存进文件,然后再接收再保存进文件……
追问
我是要像用scanf()一样只用一次回车录入
追答
好办,申请堆内存,这个内存足够大,如100M,录入完之后看看实际输入多少,按着实际输入的,再申请那么大,放在新申请的里面,然后释放100M,然后你怎么处理这个字符串都行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式