c - 在C中按字母顺序排序链表的问题
问题描述
我正在尝试按字母顺序对 C 中的链表进行排序。我使用的链表如下:
struct lineList{ //structure with all the line of the input file
char *line;
struct lineList *next;
};
typedef struct lineList llist;
line
我将从此文件中获取的一些路径保存到字符串中:
/home/user/Scrivania/find/try
/home/user/Scrivania/find/try1
/home/user/Scrivania/tryDir
然后我尝试使用这部分代码按字母顺序对它们进行排序:
char *line;
size_t len = 0;
ssize_t line_size;
llist *lHead = NULL;
llist *lTail = NULL;
FILE *fInput;
fInput = fopen(inputFile, "r"); //the file that contains the path of the file in which search.
if(fInput == NULL){
fprintf(stderr, "Cannot open %s, exiting. . .\n", inputFile);
exit(1);
}
while((line_size = getline(&line, &len, fInput)) != -1){
//saving into the lineList structure
llist *l = malloc (sizeof(llist));
l->line = line;
l->next = NULL;
//sort alphabetically
if(lHead == NULL || strcmp(l->line, lHead->line) < 0){
l->next = lHead;
lHead = l;
} else {
lTail = lHead;
while((lTail->next != NULL) && (strcmp(l->line, lTail->next->line) >= 0)){
lTail = lTail->next;
}
l->next = lTail->next;
lTail->next = l;
}
}
fclose(fInput);
在变量inputFile
中存储了上面显示的文件的路径。如果我尝试遍历列表并打印出我的内容,line
我总是会得到文件的最后一个路径:
/home/user/Scrivania/tryDir
/home/user/Scrivania/tryDir
/home/user/Scrivania/tryDir
我的代码有什么问题?
解决方案
字符串处理存在一些问题。为了解决这个问题,我以这种方式更改了线路分配:
llist *l = malloc (sizeof(llist));
l->line = (char*)malloc((strlen(line)+1)*sizeof(char));
strcpy(l->line,line);
l->next = NULL;
排序是正确的,字符串分配是问题所在。
推荐阅读
- javascript - Ace Editor 如何获取选定的行
- git - Yii 配置和 git:如何安全管理敏感信息?
- javascript - Material-UI:TextField:react-addons-css-transition-group 使用多行 TextFields 中断
- python - Python + Selenium 网页抓取动态元素
- php - HOW TO COUNT() 自定义帖子类型 ACF WORDPRESS 的同一字段中的值
- c# - 度数计算不准确
- go - 如何使用 go colly 在页面上获取多个元素
- docker - 当我卷曲 Kubernetes Tomcat 服务时出现 404
- mongodb - Mongodb 聚合 $gt 返回不匹配的记录
- r - 如何延长线以接触多边形?