将多维字符数组传递给 C 中的 void 函数时出错
Error when passing multidimensional char array to a void function in C
我将一个多维数组传递给函数 "read_line" 但我得到的只是一维数组,请参见下面的代码。 "read_line" 所做的是读取句子并将每个单词保存为二维数组中的单个字符串,但是当我尝试在主函数中打印二维数组时我只得到一维数组,为什么?非常感谢您的帮助
#include<stdio.h>
#include<string.h>
#define ROW 10
#define COLUMN 10
static char terminating_char;
int read_line(char array_string[ROW][COLUMN], int row_num);
int main() {
int row_num=0;
char array_string[ROW][COLUMN];
printf("Write a sentens: ");
read_line(array_string, row_num);
printf("Reversal of sentence: ");
while (row_num > 0)
printf("%s ", array_string[row_num--]);
printf("%s%c\n", array_string[row_num], terminating_char);
}
int read_line(char array_string[][COLUMN], int row_num) {
char c;
int i=0, j=0;
while ( (c = getchar()) != '\n' && i < ROW)
{
if (c == ' ' || c == '\t') {
array_string[i][j] = '[=10=]';
i++;
j = 0;
continue;
}
if (c == '.' || c == '!' || c == '?') {
terminating_char = c;
array_string[i][j] = '[=10=]';
break;
}
else if (j < COLUMN)
array_string[i][j++] = c;
}
return row_num;
}
函数:read_line()
returns 新行号。但是 main()
函数忽略了返回值,所以没有更新局部变量 row_num
所以代码块以:
开头
while (row_num > 0)
永远不会被执行
不需要 read_line()
的第二个参数。该参数可以只是函数中的局部变量而不是参数
我将一个多维数组传递给函数 "read_line" 但我得到的只是一维数组,请参见下面的代码。 "read_line" 所做的是读取句子并将每个单词保存为二维数组中的单个字符串,但是当我尝试在主函数中打印二维数组时我只得到一维数组,为什么?非常感谢您的帮助
#include<stdio.h>
#include<string.h>
#define ROW 10
#define COLUMN 10
static char terminating_char;
int read_line(char array_string[ROW][COLUMN], int row_num);
int main() {
int row_num=0;
char array_string[ROW][COLUMN];
printf("Write a sentens: ");
read_line(array_string, row_num);
printf("Reversal of sentence: ");
while (row_num > 0)
printf("%s ", array_string[row_num--]);
printf("%s%c\n", array_string[row_num], terminating_char);
}
int read_line(char array_string[][COLUMN], int row_num) {
char c;
int i=0, j=0;
while ( (c = getchar()) != '\n' && i < ROW)
{
if (c == ' ' || c == '\t') {
array_string[i][j] = '[=10=]';
i++;
j = 0;
continue;
}
if (c == '.' || c == '!' || c == '?') {
terminating_char = c;
array_string[i][j] = '[=10=]';
break;
}
else if (j < COLUMN)
array_string[i][j++] = c;
}
return row_num;
}
函数:read_line()
returns 新行号。但是 main()
函数忽略了返回值,所以没有更新局部变量 row_num
所以代码块以:
while (row_num > 0)
永远不会被执行
不需要 read_line()
的第二个参数。该参数可以只是函数中的局部变量而不是参数