C-将3D字符数组传递给函数
我正试图编写一个程序来分析用户提供的字符串(3 x 4)矩阵。最终,它需要输出矩阵中最长的字符串以及该字符串的长度 根据判断,我的程序似乎正确地读取了输入,成功地回显了输入字符串,但它没有正确地输出最长的单词。我确信当我传递最长单词的值时,我犯了某种与指针相关的错误,但我不知道如何解决它 这是我的密码:C-将3D字符数组传递给函数,c,string,multidimensional-array,C,String,Multidimensional Array,我正试图编写一个程序来分析用户提供的字符串(3 x 4)矩阵。最终,它需要输出矩阵中最长的字符串以及该字符串的长度 根据判断,我的程序似乎正确地读取了输入,成功地回显了输入字符串,但它没有正确地输出最长的单词。我确信当我传递最长单词的值时,我犯了某种与指针相关的错误,但我不知道如何解决它 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <string.h> #define M 4 #define
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 4
#define N 5
#define MAX_DIM 20
void findMAX(char matrice[N][M][MAX_DIM]) {
char maxr;
int index;
int i, j, it;
index = 0;
maxr = *(*(*(matrice+0)+0)+MAX_DIM);
for (i = 0; i < N-1; i++) {
for (j = 0; j < M-1; j++) {
if (index < strlen(matrice[i][j])) {
index = strlen(matrice[i][j]);
// I save the longer line's value
it = i;
// I save the maximum's value
maxr = *(*(*(matrice+i)+j)+MAX_DIM);
}
}
}
printf ("The MAX is: -/%s/- and it's long: -/%d/- \n", maxr, index);
printf ("It is content in the: %d line, which is: \n", it);
for (j = 0; j < N-1; j++) {
printf("%s ", matrice[it][j]);
}
}
void leggi(char matrice[N][M][MAX_DIM]) {
int i, j;
for (i = 0; i < N-1; i++) {
for (j = 0; j < M-1; j++) {
printf ("Insert the element matrix [%d][%d]: ", i, j);
scanf ("%s", matrice[i][j]);
fflush(stdin);
}
}
}
void stampa(char matrice[N][M][MAX_DIM]) {
int i, j;
printf("\n(4 x 3) MATRIX\n");
for (i = 0; i < N-1; i++) {
for (j = 0; j < M-1; j++) {
printf("%s ", matrice[i][j]);
}
printf("\n\n");
}
}
int main(int argc, char *argv[]) {
char matrix[N][M][MAX_DIM]; //Matrix of N*M strings, which are long MAX_DIM
printf("************************************************\n");
printf("** FIND THE LINE WITH THE MAXIMUM ELEMENT **\n");
printf("** IN A (4 x 3) MATRIX **\n");
printf("************************************************\n");
printf ("Matrix Reading & Printing\n");
leggi (matrix);
stampa (matrix);
findMAX(matrix);
return 0;
}
#包括
#包括
#包括
#定义M4
#定义n5
#定义最大尺寸20
void findMAX(字符矩阵[N][M][MAX\u DIM]){
char-maxr;
整数指数;
int i,j,it;
指数=0;
maxr=*(*(*(矩阵+0)+0)+MAX\u DIM);
对于(i=0;i
如果在编译时知道次要维度的大小,则可以将多维数组传递给C函数。但是,语法是不可接受的
void foo( int (*array2d)[6] )
通常在编译时不知道数组维度,因此有必要创建平面数组并通过
array2D[y*width+x]
一般来说,即使已知数组维度,也更容易使用此方法
为了澄清对注释的响应,C99允许使用更直观的语法传递可变大小的数组。然而,微软Visual C++编译器并不支持这个标准,这意味着你不能在很多实际的应用中使用它。 < P>尝试类似的事情:
void findMAX(char matrice[N][M][MAX_DIM]){
// char maxr
char maxr[MAX_DIM];
int index;
int i, j, it;
index = 0;
// maxr = *(*(*(matrice+0)+0)+MAX_DIM);
strncpy(maxr, *(*(matrice+0)+0), MAX_DIM);
for (i = 0; i < N-1; i++)
{
for (j = 0; j < M-1; j++)
{
if (index < strlen(matrice[i][j]))
{
index = strlen(matrice[i][j]);
it = i;
// maxr = *(*(*(matrice+i)+j)+MAX_DIM);
strncpy(maxr, *(*(matrice+i)+j), MAX_DIM);
}
}
}
printf ("The MAX is: -/%s/- and it's long: -/%d/- \n", maxr, index);
printf ("It is content in the: %d line, which is: \n", it);
// for (j = 0; j < N-1; j++){
for (j = 0; j < M-1; j++){
printf("%s ", matrice[it][j]);
}
}
void findMAX(字符矩阵[N][M][MAX\u DIM]){
//字符最大值
字符最大值[MAX_DIM];
整数指数;
int i,j,it;
指数=0;
//maxr=*(*(*(矩阵+0)+0)+MAX\u DIM);
strncpy(maxr,*(*(矩阵+0)+0),MAX_DIM);
对于(i=0;i <>代码>首先解决另一个答案所传达的一些误解,请将你的3D数组声明为
char matrix[N][M][MAX_DIM];
,其中N
、M
和MAX\u DIM
是扩展为整数常量的宏
- 这是一个普通数组(不是可变长度数组)
- 如果要将此数组传递给函数,完全可以使用与声明数组完全相同的方式声明相应的函数参数,正如您所做的那样:
- 但确实,实际传递的不是数组本身,而是指向其第一个元素的指针(也可以通过它访问所有其他元素。在C中,多维数组是数组的数组,因此三维数组的第一个元素是二维数组。在任何情况下,该函数声明都等效于这两个:
void findMAX(char (*matrice)[M][MAX_DIM])
void findMAX(char matrice[][M][MAX_DIM])
特别要注意的是,第一个维度没有被传达。在这三个等价的形式中,我发现在大多数情况下,最后一个维度是最清晰的
不过,在findMAX()函数中访问数组元素的方式很奇怪。下面是一个典型示例:
maxr = *(*(*(matrice+i)+j)+MAX_DIM);
但这是一个多么丑陋和令人困惑的表达,尤其是与这个保证等价的表达相比:
maxr = matrice[i][j][MAX_DIM];
然而,看看它,看看你是如何使用它的,我发现虽然赋值是正确的类型,但你可能使用了错误的类型。maxr
包含一个char
。如果你想以某种方式捕获整个字符串的值,那么你需要将它声明为数组(您可以根据需要将字符串的内容复制到其中),或者将其设置为指向感兴趣的字符串的指针。后一种方法效率更高,我认为没有什么建议您使用前一种方法
因此,我认为你想要
char *maxr;
……后来
maxr = matrice[0][0];
……还有
maxr = matrice[i][j];
您应该熟悉这种用法,例如,您的函数stampo()
;主要区别在于现在您将表达式赋值给变量,而不是直接传递它
maxr = matrice[i][j];
printf ("The MAX is: -/%s/- and it's long: -/%d/- \n", maxr, index);