用C中的字符串指针数组创建一个2D数组

时间:2013-07-03 20:11:30

标签: c arrays string pointers

这是我之前查询的扩展 - array of string pointers in C

我在C

中有这个工作示例代码
int main(void)
{
    char *array1 = "12345";
    char *array2 = "abcde";
    char *array3 = "67890";
    char *array4 = "fghij";

    char *array_2d[4];

    array_2d[0] = array1; 
    array_2d[1] = array2; 
    array_2d[2] = array3;
    array_2d[3] = array4;

    int i,j;

    for(i = 0; i<=3 ; i++ ) {
        for(j = 0; j<=4 ; j++) {
            printf("%c", array_2d[i][j]);

        }
    printf("\n");
    }

}

我想取消引用

*array1 to *array4

即。

array_2d[0] -> "12345" 
....
array_2d[3] -> "fghij"

而不是

array_2d[0] -> array1 -> "12345"
....
array_2d[3] -> array4 -> "fghij"

这可能吗?我想将array_2d增加到[8] 并说

array_2d[4] -> array1 -> "ABCDE"
....
array_2d[7] -> array4 -> "FGHIJ"

我希望这似乎很清楚......

编辑 -

我想我明白了。这就是我想要做的事情。

char *array1 = "12345";
char *array2 = "abcde";
char *array3 = "67890";
char *array4 = "fghij";

char *array_2d[8];

array_2d[0] = array1; 
array_2d[1] = array2; 
array_2d[2] = array3;
array_2d[3] = array4;

array1 = "AAAAA";
array2 = "BBBBB";
array3 = "CCCCC";
array4 = "DDDDD";

array_2d[4] = array1; 
array_2d[5] = array2; 
array_2d[6] = array3;
array_2d[7] = array4;

2 个答案:

答案 0 :(得分:4)

根据评论,我认为这就是你所要求的。

int main(void)
{
    char *array1 = "12345";
    char *array2 = "abcde";
    char *array3 = "67890";
    char *array4 = "fghij";

    char *array_2d[8];

    array_2d[0] = array1; 
    array_2d[1] = array2; 
    array_2d[2] = array3;
    array_2d[3] = array4;

    array1 = "ABCDE";
    array2 = "GHIJK";
    array3 = "LMNOP";
    array4 = "QRSTU";

    array_2d[4] = array1;
    array_2d[5] = array2;
    array_2d[6] = array3;
    array_2d[7] = array4;

    int i,j;

    for(i = 0; i<=7 ; i++ ) {
        for(j = 0; j<=4 ; j++) {
            printf("%c", array_2d[i][j]);
        }
    printf("\n");
    }
}

重新分配array1不会影响array_2d[0]指向的内容。原始赋值只是复制指针,它不会使它们成为彼此的别名。

答案 1 :(得分:1)

就像其他人所说的那样,我不清楚要问的是什么,但是可以按如下方式复制字符串(这只是一种可能的方式):

char *array_2d[8];

array_2d[0] = strdup( array1 ); 
...
array_2d[4] = strdup( array_2d[1] ); 
strupr( array_2d[4] );
...

这将导致在每个位置放置单独分配的字符串。 strdup复制字符串。请注意,您必须调用free()(例如free( array_2d[0] );)来释放该内存。

需要注意的另一件事:OP似乎表明您计划修改array1指向的数组(字符串)。你不能改变那个记忆(它是一个字符串常量)。但是,您可以更改array1指向的内容。