【发布时间】:2017-09-16 20:05:21
【问题描述】:
我真的看不出这段代码有什么问题?
例如,我正在尝试获取:
w 3 l l
d o n 3
g a m 3
o v 3 r
来自:
l 3 3 r
l n m 3
3 0 4 v
w d g 0
这是我的代码:
int main() {
printf("Size of array : ");
int n;
scanf("%d", &n);
printf("Cases : \n");
char **array = (char**)malloc(n * sizeof(char));
for (i = 0; i < n; i++)
array[i] = (char*)malloc(n * sizeof(char));
int j;
// Words input
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
scanf("%c", &array[i][j]);
}
}
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
printf("%c", array[i][j]);
}
}
printf("\n\n");
// Transpose of the array
for (i = 0; i <= n; i++) {
for (j = i + 1; j < n; j++) {
char tmp = array[i][j];
array[i][j] = array[j][i];
array[j][i] = tmp;
}
}
// Display the transposed array
printf("Transposed array \n");
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
printf("%c", array[i][j]);
}
}
printf("\n");
printf("\n");
// Swap the columns
for (i = 0; i <= n; i++) {
for (j = 0; j < n / 2; j++) {
char tmp = array[i][j];
array[i][j] = array[i][n - 1 - j];
array[i][n - 1 - j] = tmp;
}
}
// Display after rotation
printf("After rotation\n");
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
printf("%c", array[i][j]);
}
}
printf("\n");
return 0;
}
语法有问题吗? 它似乎可以很好地处理整数......
int main() {
printf("Size of array : ");
int n;
scanf("%d", &n);
printf("Cases : \n");
char **array = (char**)malloc(n * sizeof(char));
for (i = 0; i < n; i++)
array[i] = (char*)malloc(n * sizeof(char));
int j;
// Words input
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
scanf("%c", &array[i][j]);
}
}
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
printf("%c", array[i][j]);
}
}
printf("\n\n");
// Transpose of the array
for (i = 0; i <= n; i++ ) {
for (j = i + 1; j < n; j++ ) {
char tmp = array[i][j];
array[i][j] = array[j][i];
array[j][i] = tmp;
}
}
// Display the transposed array
printf("Transposed array \n");
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
printf("%c", array[i][j]);
}
}
printf("\n");
printf("\n");
// Swap the columns
for (i = 0; i <= n; i++) {
for (j = 0; j < n / 2; j++) {
char tmp = array[i][j];
array[i][j] = array[i][n - 1 - j];
array[i][n - 1 - j] = tmp;
}
}
// Display after rotation
printf("After rotation\n");
for (i = 0; i <= n; i++) {
for (j = 0; j < n; j++) {
printf("%c", array[i][j]);
}
}
printf("\n");
return 0;
}
【问题讨论】:
-
当你为
array分配内存时,你分配了多少字节? -
另外,
n元素数组的顶部索引是什么?一个循环,直到例如i <= n为真,i的最后一个值是多少?这是一个有效的索引吗? -
i未声明 -
最后,请阅读undefined behavior(这就是你所拥有的)。 UB 使您的整个程序格式错误且无效。 UB 的可能性之一是该程序可能看似工作正常(而实际上它通常不会)。
-
@J.Carter:感谢您展示了为什么投射
malloc的结果是一个非常糟糕的主意。您显示的定义非常错误。为什么要将指针转换为char?
标签: c arrays memory multidimensional-array rotation