gpt4 book ai didi

c - 练习中的动态内存分配

转载 作者:行者123 更新时间:2023-11-30 15:29:19 24 4
gpt4 key购买 nike

程序从标准输入读取行。每行都打印在标准输出上,前面带有行号。该程序对其可以处理的行长度没有内置限制。

我的答案是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 30

int main(){

int line_n=0;
char line[MAXSIZE];
char *p;

while(gets(&line))
{
if('\n'){
if(*line=='q') break;
else if(strlen(line)>MAXSIZE){
p=&line;
p=(char *)malloc(sizeof(strlen(line))); //failed to use dynamic memory allocation here
printf("%d).",line_n);
printf("%s\n",line);
}
else{
printf("%d).",line_n);
printf("%s\n",line);
}
}
line_n++;
}

我对 C 编程还很陌生,我需要有关动态内存分配的帮助。当我的输入大于 MAXSIZE 时,我会发生溢出。

最佳答案

试试这个:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ALLOCSIZE 30

int main()
{
int line_n = 0;
char *line = NULL;
int linelen = 0;
int linecap = 0;
char *p;
int c;

while ((c = fgetc(stdin)) != EOF)
{
if (c == '\n')
{
if ((line) && (*line == 'q'))
{
linelen = 0;
break;
}

printf("%d).%.*s\n", line_n, linelen, line);
linelen = 0;
line_n++;
}
else
{
if (linelen == linecap)
{
p = (char *) realloc(line, linecap + ALLOCSIZE);
if (!p) break;
line = p;
linecap += ALLOCSIZE;
}

line[linelen] = c;
linelen++;
}
}

if (linelen > 0)
printf("%d).%.*s\n", line_n, linelen, line);

free(line);

或者这个:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int line_n = 0;
char *line = NULL;
size_t linelen = 0;
char *p;

while (getline(&line, &linelen, stdin) != -1)
{
if (*line == 'q') break;
printf("%d).%.*s\n", line_n, linelen, line);
line_n++;
}

free(line);

关于c - 练习中的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309658/

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