【发布时间】:2018-10-13 17:36:43
【问题描述】:
我对编码很陌生,遇到了一个问题。我试图自己解决它并且一直在谷歌搜索,但我仍然没有解决这个问题。也许你们中的一个可以提供帮助?
这是我的代码:
int main(int argc, char **argv) {
struct node {
char *str;
int count;
struct node *next;
};
struct node head = { argv[1], 1, NULL };
for (int i = 2; i < (argc); i++) {
for (struct node *p = &head; (p != NULL); p = p->next) {
printf("%s,%s\n", argv[i], p->str);
if (strcmp(argv[i], p->str) == 0) {
printf("case1\n");
p->count++;
break;
}
else if ((strcmp(argv[i], p->str) != 0) && p->next) {
printf("case2\n");
printf("Adresse, auf die p zeigt: %p", &p);
continue;
}
else if ((strcmp(argv[i], p->str) != 0) && (!p->next)) {
printf("case3\n");
struct node *oldhead = &head;
head.str = argv[i];
head.count = 1;
head.next = oldhead;
break;
}
}
}
// Print how many times each string appears
return 0;
}
目标是创建一个链接列表,其中包含我在调用程序时提供给main() 的所有参数。如果有重复,结构应该计算它们。例如,如果我调用像./a.out foo fool foo 这样的程序,结果应该是一个长度为2 的列表,其中第一个元素包含字符串"foo" 和计数2,第二个元素包含字符串"fool" 并且有1 的计数。问题是内部 for 循环中的 else if-statement。这是实际应该使用内部 for 循环并将p->next 分配给p 的唯一部分。不幸的是,这并没有发生。结果是内部 for 循环一遍又一遍地开始,并且指针 p 一直指向同一个地址(我使用 printf 来解决这个问题)。
你们中有人知道这可能是什么问题吗?我尽我所能,并试图在网上找到解决方案......
非常感谢!!!
【问题讨论】:
-
你在哪里分配你的其他节点?
-
。 o O(为什么每个第二个提问者都说“这是我的全部代码”,但不包括
#includes??它是一个 PITA!) -
为什么要使用效率最低的数据结构之一?既然有
std::list<>,为什么要自己实现呢? -
@Swordfish 因为C中没有
std::list<>? -
@WhozCraig 我发誓,我看到了 C++ 标签。好吧,第一个问题仍然存在。
标签: c pointers for-loop infinite-loop