元素未添加到链接列表

时间:2016-06-06 18:34:34

标签: c++ c arrays string linked-list

我无法将元素添加到我的链接列表中。我已经能够在main()中正确地扫描char字符串,并将其复制到temp节点,但是这不会被添加到链表中。

struct node{
    char string[MAX_STRING_LENGTH];
    node *next;
};

void insertAsFirstElement(node *head, node *last, char string[MAX_STRING_LENGTH])
{

    //create temporary node
    node *temp = new node;

    printf("The temp's string before copy is %s.\n", temp->string);
    //this is the string copy from the user to the temp
    strcpy(temp->string, string);

    printf("The temp's string is %s.\n", temp->string);

    //set the next pointer to NULL (points to nothing)
    temp->next = NULL;
    //set first value in list to temp
    head = temp;
    //set last value to temp
    last = temp;
}

2 个答案:

答案 0 :(得分:1)

//this is the string copy from temp to new
char *strcpy(char *temp, const char string);

声明 strcpy函数。你想打电话

strcpy(temp->string, string);

请不要混用C和C ++。它们是非常不同的语言。如果你想在C ++中这样做,那就太容易了。

#include <string>
#include <list>

int main() {
    std::list<std::string> strings;
    char choice = menu();

    while (choice != '4') {
        switch (choice) {
        case '1':
            std::string input;
            std::cout << "Please enter a string: ";
            std::cin >> input;
            strings.push_back(input);
            break;
        case '2':
            strings.pop_front();
            break;
        case '3':
            if (strings.size() == 0) {
                std::cout << "The list is empty.\n";
            } else {
                for (auto &s : strings) {
                    std::cout << s << "\n";
                }
            }
            break;
        default:
            std::cout << "System Exit";
            return 0;
        }
    }
}

答案 1 :(得分:0)

您发布的代码存在一些问题。

第一个是你的链表不包含字符串,它包含一个指针数组。

您应该省略*

中的char *string[MAX_STRING_LENGTH];

第二个是您致电scanf

scanf("%s\n", &string[MAX_STRING_LENGTH]);

这会将程序用户的输入放入字符串后面的内存中。 这不是你想要的。您希望用户的输入进入字符串开头的内存,如下所示:

scanf("%s\n", &string[0]);

或写得更简单:

scanf("%s\n", string);

最后,您并未将字符串复制到链接列表。 您可以使用strcpy执行此操作,如下所示:

strcpy(temp->string, string);