gpt4 book ai didi

C 动态长度 char 数组

转载 作者:行者123 更新时间:2023-11-30 14:40:25 25 4
gpt4 key购买 nike

我想用 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] = '\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] = '\0';
strcat(line, str);
break;
}

strcat(line, str);

line = realloc(line, strlen(line) + 10);
str = realloc(str, strlen(str) + 10);
}

fprintf(stderr, "you entered %s\n", 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 中,我将从标准输入写入输入并将其连接到 char *line 。 str 最多只能容纳 10 个字节的字符,因此我需要将所有内容连接到 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%s\n", readline());

return 0;
}

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

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

关于C 动态长度 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55563994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com