-2
struct arr 
{char * str;
 int ctr;
}m_arr[100];

私が直面している問題は、stringフィールドとintフィールドに値を挿入し、配列をトラバースして印刷すると、intフィールドは正しく表示されますが、文字列フィールドは常に最後に更新したものです。

例:私が渡す値は{'t-1',2} and {'t-2',5}です。

forループを使用して、取得した配列要素を表示する{'t-2',2}と、{'t-2',5}

どこが間違っているのですか?

私は最初にキューを使用しようとしましたが、同じ問題が発生しました。したがって、配列を使用して実装しますが、これも同じ問題です。助けてください。非常に緊急。

4

2 に答える 2

1

文字列用のスペースをどこかに割り当てる必要があります。構造体でそれを行うのが最も簡単です:

struct arr 
{
    char str[32];
    int  ctr;
} m_arr[100];

malloc()しかし、 et al (または を使用) を使用して動的メモリ割り当てを行うこともできますstrdup()

m_arr[i].str示された構造を使用して、読み取った文字列をusingstrcpy()または同等のものにコピーします。文字列がデータに対して長すぎないように注意してください。動的割り当ての利点の 1 つstrdup()は、文字列を常に十分な大きさにできることです。

于 2012-10-30T00:35:50.560 に答える
1

ここでの問題は、実際に文字列をそこに保存しないことです。あなたはそれを指すポインターを保持しているだけです。実際に出力する値は、それを埋めるために使用した一時的な文字列であると思います。

最も簡単な修正は、ポインターではなく文字列を使用することです。

struct arr
{
    char str[10]; // able to hold up to 9 characters + terminating \0
    int ctr;
} m_arr[100];

実際に文字列を保存するには、strcpy()またはを使用してコピーする必要がありsprintf()ます。

于 2012-10-30T00:36:04.100 に答える