C 动态长度字符数组



我想用 C 语言编写一个程序,该程序将接受 stdin 中任意长度的行并显示它或对该字符串应用任何函数。为此,我将需要一个具有动态长度的字符串(char [](。

我是这样做的:

#include <stdio.h>
#include <unistd.h> 
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv){

    char *line;
    line = malloc(10);
    line[0] = '';
    char *str = malloc(10);
    fprintf(stdout, "Please enter your line:n");
    while(fgets(str, 10, stdin)){
        //check for line break
        if(str[strlen(str)-1] == 'n'){
            str[strlen(str) - 1] = '';
            strcat(line, str);
            break;
        }
        strcat(line, str);
        line = realloc(line, strlen(line) + 10);
        str = realloc(str, strlen(str) + 10);
    }
    fprintf(stderr, "you entered %sn", line);
    //just for testing
    /*
    fprintf(stderr, "n str= %s n", str );
    fprintf(stderr, "n line= %s n", line);
    */
    free(line);
    free(str);
    exit(EXIT_SUCCESS);
}

然而,这看起来很糟糕。我需要两个字符数组。在char *str中,我将写入来自 stdin 的输入并将其连接到 char *linestr最多只能容纳 10Bytes 的字符,因此我需要将所有内容连接起来line .

在这种情况下,有没有更干净的方法来保存stdin的输出并对其应用一些功能?我做错了吗?没有mallocrealloc可以做到吗?

这是一个

示例。您需要添加malloc和realloc结果检查(为了简单起见,我没有这样做(

#include <stdio.h>
#include <stdlib.h>
#define CHUNK   32 
char *readline(void)
{
    size_t csize = CHUNK;
    size_t cpos = 0;
    char *str = malloc(CHUNK);
    int ch;
    while((ch = fgetc(stdin)) != 'n' && ch != 'r')
    {
        str[cpos++] = ch;
        if(cpos == csize)
        {
            csize += CHUNK;
            str = realloc(str, csize);
        }
    }
    str[cpos] = 0;
    return str;
}
int main()
{
    printf("n%sn", readline());
    return 0;
}

工作示例:https://onlinegdb.com/Sk9r4gOYV

还应该在不再需要时释放分配的内存。

相关内容

  • 没有找到相关文章

最新更新