编写一个linux C语言程序 接受输入一个任意长度的字符串并输出(使用malloc和realloc函数)

编写一个linux C语言程序 接受输入一个任意长度的字符串并输出(使用malloc和realloc函数),第1张

#include <stdio.h>

#include <stdlib.h>

#define CHUNKSIZE 100

int main()

{

    char *string

    int i=0,c

    string=malloc(sizeof(char)*CHUNKSIZE+1)

    if(string==NULL)

    {

        printf("out of memory")

        return 1

    }

    while((c=getchar())!=EOF)

    {

        string[i]=c

        i++

        if(i%CHUNKSIZE==0)

        {

            string=realloc(string,sizeof(char)*CHUNKSIZE*(i/CHUNKSIZE+1)+1)

            if(string==NULL)

            {

                printf("out of memory")

                return 1

            }

        }

    }

    printf("\n\norgin string is:\n%s\n",string)

    free(string)

    return 0

}

输入任意长度字符串,CTRL+D结束输入

“任意长度”实际上是做不到的,即使所用的软件平台没有限制,硬件环境也不允许。所以“任意长度”应当理解为在一个很大的空间之内没有限制地输入字符串而不用事先确定长度。鉴于这种理解,可以定义一个输入函数,先动态申请一个较大的空间,直接向其内输入字符串;输入完毕后检测其长度,再按实际需要申请一个合适大小的空间,把刚才输入的字符串拷贝到这个合适大小的空间里,再把原先申请的大空间释放。举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

#define N 131071

char *Any_Long_Str(char *p){

    char *pt

    if((pt=(char *)malloc(N))==NULL){//Apply for a larger space for temporary use

        printf("Apply for temporary use of space to fail...\n")

        exit(0)

    }

    gets(pt)//Get a string from the keyboard

    if((p=(char *)malloc(strlen(pt)+1))==NULL){//Apply for a suitable size of space

        printf("Application memory failure...\n")

        exit(0)

    }

    strcpy(p,pt)//Copy the string pt to p

    free(pt)//Release the temporary use of space

    return p

}

int main(void){

    char *pstr=NULL

    printf("Input a string:\n")

    pstr=Any_Long_Str(pstr)

    printf("%s\n",pstr)//Look at...

    free(pstr)//Release the space

    return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8990649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存