【发布时间】:2014-11-20 15:07:22
【问题描述】:
我的任务是创建一个程序,该程序从文件中读取所有单词并将这些单词从头到尾都相同(我的意思是 aha、oho、asdsa、assa 等)。并且任务需要使用动态内存(大学),但是我已经被困在这个地方好几天了,因为我找不到它为什么不想做我打算做的事情。我有 4 个单词在文件中。这 4 个 printfs 应该打印所有单词,但我的程序会打印第三个单词(null)和分段错误。我使用单面动态内存。 请解释为什么它不起作用,因为我自己做不到。先感谢您! 代码:
/*
* 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);
}
【问题讨论】:
-
显示输入和所需输出的示例。
-
从不转换 malloc() 的结果
-
@MichaelWalz 还没有输出部分,因为我无法将整个信息放入动态数组中。
-
你的意思是回文?
-
看起来你的 while 循环永远不会通过第二个元素。如果我错了,请纠正我,但在某些时候你不应该说
element = element->next吗?