我的任务是创建一个程序,该程序从文件中读取所有单词,并将那些从头到尾都相同的单词放入输出文件中(我的意思是aha,oho,asdsa,assa等)。任务需要使用动态内存(大学),但是我已经在这里呆了好几天了,因为我找不到为什么它不想做我打算做的事情。我的档案有4个字。那4个printfs应该打印所有单词,但是我的程序会打印第三个单词,(空)和分段错误。我使用单面动态内存。
请解释为什么它不起作用,因为我自己做不到。先感谢您!
码:
/*
* Task: Write program, that finds all words from file which reads from beginning to end (lets call them mirror-type words)
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct elements
{
char str[255];
struct elements *next;
};
/* Function checks if given word is mirror-type word */
int is_mirror(char str[255])
{
int length = strlen(str);
int to = (length % 2 == 1) ? (length - 1) / 2 : length / 2;
int i = 0;
while (i < to)
{
if (str[i] != str[length-i-1]) return 0;
i++;
}
return 1;
};
int main()
{
FILE *in;
in = fopen("3_12.in", "r");
if (in == NULL)
{
printf("Input file doesnt exist.\r\n");
return 0;
}
char str[255];
fscanf(in, "%s", str);
struct elements *beginning, *element;
element = (struct elements *) malloc(sizeof(struct elements));
strcpy(element->str, str);
beginning = element;
do
{
fscanf(in, "%s", str);
element->next = (struct elements *) malloc(sizeof(struct elements));
strcpy(element->str, str);
if (feof(in))
{
element->next = NULL;
break;
}
}
while(1);
printf("%s\r\n", element->str);
printf("%s\r\n", element->next->str);
printf("%s\r\n", element->next->next->str);
printf("%s\r\n", element->next->next->next->str);
fclose(in);
}
最佳答案
查看您的代码,好像您错过了循环的一步。您永远不会通过第二个单词,因为element永远不会更新。
代码段
do
{
fscanf(in, "%s", str); //Get the string
element->next = (struct elements *) malloc(sizeof(struct elements)); //Create a new element at the end of the list
element = element->next; //Move forward to the newly created element
strcpy(element->str, str); //Copy the read string into the newly create element's `str`
//If we've hit the end of the file, put a null at the end of the list and break
if (feof(in))
{
element->next = NULL;
break;
}
}
while(1);
查看此page,它具有有关链接的lsits(这就是您正在使用的内容)的一些重要信息。
编辑1
我发现我编写的原始代码有错误。设置
str
的位置将覆盖原始元素的str
值。该代码永远不会创建一个列表,该列表的长度不得超过1个元素,并且一个元素将始终在文件中包含最后一个单词,后跟一个null。关于c - 动态内存C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27042849/