1

我正在尝试通过以下方式分配一个二维字符串数组:

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

2

char *text_data[10][4];是指针矩阵,每个位置都可以指向一个字符串。

但是您没有初始化或分配内存,因此您不能调用字符串复制。

你可以这样做:

 text_data[i][0] = "a";
 text_data[i][1] = "xyz";

第二:我也觉得你想声明text_data为:

char text_data[10][4];

因为每个字符串的长度都小于或等于 3,所以喜欢:

strcpy(text_data[0], "a");
strcpy(text_data[1], "xyz");
strcpy(text_data[2], "b");
strcpy(text_data[3], "xyz");  

不需要循环

于 2013-08-01T17:05:07.660 回答
2

strcpy 只会复制到预先分配的缓冲区,所以试试这个

char text_data[10][4][4];

如果你有一个字符串的双数组,你实际上有一个三元数组,因为字符串是一个字符数组。

于 2013-08-01T17:06:49.650 回答
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]) 指针中的每一个执行一个,并且每个指针都malloc()需要分配字符串的长度(或最大长度),即. 与该指针元素相关联。

于 2013-08-01T21:03:40.037 回答