C语言如何定于未知长度的字符串

如题所述

用动态申请内存的方法可以解决这个问题,有两种措施可以考虑:

    设置一个循环,先动态申请一个较小的空间比如10字节,然后输入字符;当输入满时另外申请一个20字节的空间,把已输入的10个字符拷贝过来,释放掉10个字节的空间。然后向20个字节的空间里接着输入字符,写满时再申请一个30字符的空间……如此反复,直到输入'\n'时结束。

    先动态申请一个较大的空间,如65535字节,直接向里输入字符,输入结束后测出长度,按实际需要另外申请一个空间把字符串拷贝过来,释放原来的空间。

措施1比较切合题意,但时效差,空间也不省(最后一瞬需要近二倍的空间)。措施2显得更有实际意义,因为“无限”的长度肯定是不存在的,所以取一个“够用”的大小临时用一下是可取的。下面提供措施2的参考代码:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define N 65535
char *mygets(char *p){
    char *ptmp;
    if((ptmp=(char *)malloc(N))==NULL){//申请一个较大的临时用空间
        printf("Application memory failure...\n");
        exit(0);
    }
    gets(ptmp);//向临时空间直接输入字符串
    if((p=(char *)malloc(strlen(ptmp)+1))==NULL){//按实际需要申请空间
        printf("Application memory failure...\n");
        exit(0);
    }
    strcpy(p,ptmp);//把字符串拷贝所需大小的空间里
    free(ptmp);//释放临时空间
    return p;
}
int main(void){
    char *str=NULL;
    printf("Input a string...\nstr=");
    str=mygets(str);
    printf("%s\n",str);
    free(str);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-11
先分配一个大多数情况下都够用的的空间如果多了以后可以用函数realloc把空间改小一点,如果少了那么就再申请一块,如此下去,直到有一够了为止,最后再接起来。当然,这样太麻烦,偶一般都是定义一个允许用户输入的最大值,比如1000个字符,文档里写清楚,假如用户故意搞乱,程序死了或者得出错误结果偶都是概不负责
第2个回答  2013-07-11
没读明白你这话是什么意思,string str=长度字符串;int len=str.Length; 字符串的长度
第3个回答  2013-07-11
for(i=0;i<strlen(str);i++)
第4个回答  2013-07-11
strlen函数不就是干这个的吗
相似回答