1

次の方法で文字列の 2D 配列を割り当てようとしています。

char *text_data[10][4]; //10 rows, 4 columns

//All rows need to be same
for (i = 0; i < 10; i++)
{
    strcpy(text_data[i][0], "a");
    strcpy(text_data[i][1], "xyz");
    strcpy(text_data[i][2], "b");
    strcpy(text_data[i][3], "xyz");  
}

ただし、これは機能しません。私は何を間違っていますか?

4

4 に答える 4

0

あなたのコードは次のようになるはずです。文字列の長さに制限はありません。文字の 3D 配列はありません。しかし、私はプログラミングにかなり慣れていないので、間違っている可能性があります。

#include <stdio.h>


int main(void)
{
    char *text_data[10][4]; //10 rows, 4 columns
    int i;
//All rows need to be same
    for (i = 0; i < 10; i++)
    {
        text_data[i][0]= "a";
        text_data[i][1]="xyz";
        text_data[i][2]= "b";
        text_data[i][3]= "xyz";  
    }

    for (i = 0; i < 10; i++)
    {
        puts(text_data[i][0]);
        puts(text_data[i][1]);
        puts(text_data[i][2]);
        puts(text_data[i][3]);
    }
return 0;
}
于 2013-08-01T20:12:01.163 に答える
0

うまくいけば、あなたのコードが何をしようとしているのか理解できます。次のように書き直しました。

    #include <stdio.h>
    void main()
    {
        // allocate 40 uninitialized pointers to char strings
    char *text_ptr[10][4]; //10 rows, 4 columns

        int i;

    for (i = 0; i < 10; i++)
    {
    // essentially, copy ptr to string literal into an array element
        text_ptr[i][0] = "a";
        text_ptr[i][1] = "xyz";
        text_ptr[i][2] = "b";
        text_ptr[i][3] = "xyz";

        // print two elements from each row for a quick check
        printf("\n%s, %s", text_ptr[i][0], text_ptr[i][1]); fflush(stdout);

      }

     } // end of main;
     // Note.  This code WAS tested in an Eclipse/Microsoft C compiler environment.

strcpy()コピーできるように、文字列が割り当てられる領域に依存します。上記のコードには、char ポインタの配列があり、それぞれが割り当てられているリテラルのアドレスに設定されています。

このコードでは、割り当てられた文字列を更新できません。malloc()文字列を変更する場合は、40 ([10][4]) 個のポインターのそれぞれに対してa を実行する必要があり、それぞれmalloc()が文字列の長さ (または最大長) を割り当てる必要があります。 . そのポインター要素に関連付けられています。

于 2013-08-01T21:03:40.037 に答える