2

リンクリストがどのように機能するかを理解しようとしています。そして、チューターからサンプルコードを変更すると、「左オペランドは左辺値でなければなりません」というエラーが表示されます...これが私のコードです。どんな助けでも感謝します:)

struct node
{
    char name[20];
    struct node *next;
};

/*Function to allocate memory and initialize node - returns pointer to node*/
struct node*mknode(char *str)
{
    struct node *np;

    np = (struct node*)malloc(sizeof(struct node));

    if(np)
    {
        np->name = *str;
        np->next = NULL; /*sets the 'next' pointer to last list item to NULL*/
    }

    return np;

}

int main(void)
{

int i,menu,k=1,number;
char name[20];
char *str = name;
struct node* n;
struct node *head=NULL;


printf("Link Lists\n    1-Enter Data into lists\n   2-Display All List Items\n  3-Quit Program :(\n");

    do 
    {
        printf("\nPlease choose an option:  ");
        scanf("%d",&menu);

        switch (menu)
        {
            case 1:
                printf("\nPlease Enter A Number:");
                scanf("%d",&name);

                n=mknode(str); /*create new node with i as data*/

                append_node(&head,n); /*add new node to end of list*/
            break;

ここでエラーが発生します

np->name = *str;

構造体のデータ型を整数から文字に変更した後

ありがとう

4

2 に答える 2

3

C では、配列は変更可能な左辺値ではありません。つまり、配列に割り当てることはできません。あなたがしようとしていることを正しく理解している場合は、次を試すことができます。

strcpy(np->name, str);

信頼できる文字列でない場合(以前に検証していない場合)の代わりにstr使用できます。memcpystrcpy

于 2013-03-07T21:24:15.030 に答える
1

このステートメントには2つのエラーがあります

np->name = *str;

最初nameは配列として宣言されていますが、配列を割り当てることによって配列の場所を変更することはできません。name代わりに、文字列の内容を使用するようにコピーする必要がありますstrcpy

strcpy_s( np->name, sizeof(name), str );

2番目のエラーはstr、割り当てで文字列の参照を解除していることです。文字列*strの最初の文字をコピーしているだけの文字列の参照を解除すると、次のようになります。str[0]

または、代わりに名前をcharポインターとして宣言することもできますが、その場合は、文字列を割り当てて後で解放する必要があります。

typedef struct node {
  char* name;
  struct node* next;
} node;
...

np->name = strdup(str); /* allocates enough space for string and copies it. */
于 2013-03-07T21:33:31.490 に答える