0

C のリストに問題があります。

私はこの構造体を作りました:

typedef struct str {
char * str;
struct str * prox;
struct str * ant;
} cadena;

次に、主に、NULL への最初のポインターでリストを開始します。

cadena * lista = NULL;

次に、ユーザーがリスト ("str" メンバー内の文字列) に新しい要素を追加できる関数を作成し、ポインターを管理してリストを作成します。それはうまくいくようです。私は願います。

しかし、あるノードのメンバーを印刷したい場合、次のようなものを使用しようとしていますが、機能していません:

void showdata (cadena *lista) {
    int i=0;
    while (lista.str[i] != '\0')
    {
        printf("%c\n",str[i]);
        i++;
    }
}

次のエラーが表示されます。

from line "while (lista.str[i] != '\0')"
.error: request for member ‘str’ in something not a structure or union 

(なぜ構造体を期待しているのですか?私はそこでメンバーにアクセスしていると思いました)

from line "printf("%c\n",str[i]);"     
.error: ‘str’ undeclared (first use in this function)

(構造体で宣言していませんか?)

私は確かに本当に間違ったことをしていますが、char メンバーにアクセスして出力する正しい方法を理解できません。

前もって感謝します。

4

3 に答える 3

1
lista.str[i]

する必要があります

lista->str[i]

使用する構造体へのポインタがある場所ならどこでも -> not .

于 2012-10-29T00:19:21.713 に答える
1

試す:

while (lista->str[i] != '\0')
    printf("%c\n",lista->str[i++]);
于 2012-10-29T00:20:45.160 に答える
0

ポインタ表記の問題です。C はこのように混乱する可能性があります。

lista.str[i]

C は "." を認識しないため、機能しません。フィールドに移動するように。これは、"." 次のように、オブジェクトのプロパティを変更します

control.visibility = "False"

Cでは、構造体はポインターに基づいているため、キースが言ったように -> を使用する必要があります。メモリ内の場所、または特定のフィールドがある構造体内の「場所」を指しています。そのように考えれば、それほど多くの問題を抱える必要はありません。

C では、「.」を使用することもできますが、参照を強く入力した場合に限ります。あなたにとって、それは行くことを意味します

(*lista).str[i]

lista インスタンスへの参照が構造体へのポインタとして認識されるようにします。

したがって、レビューでは、どちらか

lista->str[i]

また

(*lista).str[i]

動作するはずです。

于 2012-10-29T00:49:32.777 に答える