0

这是我之前查询的扩展 - 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

IE

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;
4

2 回答 2

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]指向的内容。原始分配只是复制指针,它不会使它们成为彼此的别名。

于 2013-07-03T20:17:56.533 回答
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指向的内容。

于 2013-07-03T20:24:36.640 回答