//Given this snippet of code:
int main() {
char sample[] = "Hello World";
char ma[2][6];
char *sptr, *mptr;
return 0;
}
我正在考虑这个问题。 sptr是指向数组样本的指针,mptr是指向数组ma的指针。我是否首先需要引用指向各自数组的指针,并遍历数组ma的每个维度,并递增两个指针并将它们设置为相等?
这是我到目前为止所写的内容
int main(){
char sample[] = "Hello World"; // Create an arry of char to hold the string "Hello World"
char ma[2][6]; //Create an two dimensional array of char with 2 rows and 6 columns
char *sptr, *mptr; // Create two pointer variables of type char that are used to copy the content from array sample into array ma
char*sptr = sample;
char*mptr = ma;
int row;
int column;
for (row = 0; row < 2; row++) {
for (column = 0; column < 6; column++){
*sptr++ = *mptr++;
}
}
return 0;
答案 0 :(得分:0)
鉴于,
char sample[] = "Hello World";
char ma[2][6];
char *sptr, *mptr;
可以使用
sptr = sample;
但不是
char*sptr = sample;
您无法定义变量两次。
mptr
行有一个不同的问题。你当然无法重新定义变量。但是,您无法使用
mptr = ma;
在上面的语句中,ma
衰减为类型为char (*)[6]
的值,即指向6 char数组的指针。 mptr
的类型不是。
为了使用
mptr = ma;
您必须将mptr
定义为:
char (*mptr)[6];
在循环中。
for (row = 0; row < 2; row++) {
for (column = 0; column < 6; column++){
*sptr++ = *mptr++;
}
}
有几个问题。
下面这一行有问题。
*sptr++ = *mptr++;
然而,这可能是由于您对如何使用mptr的误解。
此外,您的问题表明您想要将1D数组的内容复制到2D数组。您需要在赋值运算符的LHS上包含一个涉及mptr
的表达式,并在表达式的RHS上包含一个涉及sptr
的表达式。
然后,您已经弄清楚如何将1D阵列的内容划分为2D阵列。您希望6
的第一个sptr
字符位于ma[0]
吗?您是否希望m[0]
和m[1]
为空终止字符串?
并且,当1D数组的长度太大而无法放入ma
提供的空间时,该怎么办?如果ma[0]
和ma[1]
为空终止字符串,ma
最多可以包含一个长度为10
的字符串。
并且,如果已经到达1D字符串的末尾,则必须添加逻辑以突破for
循环。
这是开始的事情。
for (row = 0; row < 2 && *sptr != '\0'; row++) {
// No matter when the iteration stops,
// mptr[row] will be a valid null terminated string.
mptr[row][0] = '\0';
// Don't use all the elements of the array.
// Leave the last element for the terminating null character.
for (column = 0; column < 5 && *sptr != '\0'; column++){
mptr[row][column] = *sptr++;
// No matter when the iteration stops,
// mptr[row] will be a valid null terminated string.
mptr[row][column+1] = '\0';
}
}