c语言中,怎么定义一个随意大小的字符串呢?

2024-11-23 01:17:12
推荐回答(4个)
回答(1):

你要的随意大小字符串,刚出炉,还是热的。

#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;
}

回答(2):

“随意大小”肯定是做不到的,即使软件平台不作限制,硬件资源也是有限的。正确的理解应当是使用者的主观感觉上没有上限限制。其于这种理解,下面提供的代码能做到这一点:

//#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;
}

回答(3):

c语言不能实现,字符串本质上还是字符数组以‘\0’字符结尾,在分配空间时必须指定数组长度,
例如:char str[]="abcdef";

回答(4):

C是不可能实现的
如果你要用C实现,至少要提供一个长度参数