gpt4 book ai didi

c - 为什么我的程序返回(空)和乱码而不是预期的输出

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

Windows NT 崩溃了。我是蓝屏死机。没有人听到你的尖叫声。

我正在编写一个程序,其中我必须从文件中读取俳句,之后我必须将所有五个音节行存储到一个数组中,将所有七个音节行存储到另一个数组中。我必须使用 char* 指针数组来存储每组行。我也只能在每个指针处为字符串的实际长度分配足够的空间。因此,对于上面的俳句,我应该分别为这三行分配 20、31 和 28 字节(包括\0)。从文件中读入所有行并将其存储到适当的数组中后,我必须使用随机数生成器来选择一组三行以打印到屏幕上。

#include <stdio.h> 
#include <ctype.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc, char **argv)
{
if (argc != 2)
{
printf("This number of arguments is incorrect.");

return 1;
}

FILE *oldfile, *newfile;

char const *newfilename = "myhaiku.txt";
int linecntr = 0, fivesyllines = 0, svnsyllines = 0;
int freearr, newhaiku;

// char **fivesylptrs = malloc(200 * sizeof(char *));
// char **svnsylptrs = malloc(200 * sizeof(char *));
char *fivesylptrs[200], *svnsylptrs[100];
char line[129];

srand(time(NULL));

/* for (fivesyllines = 0; fivesyllines < 200; fivesyllines++)
{
fivesylptrs[fivesyllines] = (char *) malloc(129 * sizeof(char));
}

for (svnsyllines = 0; svnsyllines < 200; svnsyllines++)
{
svnsylptrs[svnsyllines] = (char *) malloc(129 * sizeof(char));
} */

oldfile = fopen(argv[1], "r");
newfile = fopen(newfilename, "w");

if (oldfile)
{
while (fgets(line, 129, oldfile) != NULL)
{
linecntr++;

if ((linecntr % 2) != 0)
{
// printf("%s", line);

fivesylptrs[fivesyllines] = (char *)malloc(129 * sizeof(char));

if (fivesylptrs[fivesyllines] == NULL)
{
printf("The memory for the five syllable strings wasn't allocated properly.\n");
}

strcpy(fivesylptrs[fivesyllines], line);

// printf("%s", fivesylptrs[fivesyllines]);

fivesylptrs[fivesyllines] = fivesylptrs[fivesyllines + 1];

// fivesyllines++;
}
else if ((linecntr % 2) == 0 && line[0] != '\n')
{
// printf("%s", line);

svnsylptrs[svnsyllines] = (char *)malloc(129 * sizeof(char));

if (svnsylptrs[svnsyllines] == NULL)
{
printf("The memory for the seven syllable strings wasn't allocated properly.\n");
}

strcpy(svnsylptrs[svnsyllines], line);

// printf("%s", svnsylptrs[svnsyllines]);

svnsylptrs[svnsyllines] = svnsylptrs[svnsyllines + 1];

// svnsyllines++;
}
}
}
else
{
printf("This file could not be opened, please try again.\n");
}

for (newhaiku = 0; newhaiku < 10; newhaiku++)
{
printf("%s", fivesylptrs[(rand() % 200)]);
printf("%s", svnsylptrs[(rand() % 100)]);
printf("%s", fivesylptrs[(rand() % 200)]);
}

fclose(oldfile);
fclose(newfile);

for (freearr = 0; freearr < 200; freearr++)
{
free(fivesylptrs[freearr]);
}
for (freearr = 0; freearr < 100; freearr++)
{
free(svnsylptrs[freearr]);
}

return 0;
}

我已经尝试了相当多不同的技术来解决我很确定我在使用 malloc 时遇到的错误,但我无法准确地弄清楚我做错了什么。我真的很感激任何和所有的帮助!

最佳答案

svnsyllines Fivesyllines 不会递增,因此您在索引 0 处分配 svnsylptrs Fivesylptrs 多次(泄漏)。即使您访问数组的其余部分,也永远不会分配它。

关于c - 为什么我的程序返回(空)和乱码而不是预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52491149/

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