这是我之前查询的扩展 - 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;
答案 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
指向的内容。