C语言 fgets函数与二维数组
#include <stdio.h>#define MAX 1024
int main(){
char array[][] = {};
fgets(array, MAX, stdin );
return 0;
}
@FishC, fgets函数为什么不能读取二维数组,而一维数组
test.c:7:8: warning: incompatible pointer types passing 'char' to parameter of type 'char *' [-Wincompatible-pointer-types]
fgets(array, MAX, stdin );
^~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdio.h:141:30: note: passing argument to parameter here
char *fgets(char * __restrict, int, FILE *);
^
1 warning generated. fgets()函数可以读取一维字符数组(也就是字符串),而不能直接读取二维数组。这是因为fgets()函数是按行读取输入,将每行的内容存储到一个字符串中,然后将字符串复制到数组中存储。
对于二维数组,可以使用循环结构配合fgets()函数逐行读取输入,并将每行的内容分别存储到数组中的每个元素。
下面是一个示例代码:
#include <stdio.h>
#define ROW 3
#define COLUMN 4
#define MAX_LENGTH 1024
int main() {
char array;
char temp;
for (int i = 0; i < ROW; i++) {
fgets(temp, MAX_LENGTH, stdin);// 逐行读取输入
for (int j = 0; j < COLUMN; j++) {
array = temp;// 将每行的内容逐个字符存储到二维数组中
}
}
// 打印二维数组中的内容
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COLUMN; j++) {
printf("%c ", array);
}
printf("\n");
}
return 0;
}
注意,fgets()函数读取的每行内容包含了换行符('\n'),所以上面的示例代码中将换行符也存储到了二维数组中。如果不需要存储换行符,可以在存储前进行判断和处理。另外,上面的示例代码假设了二维数组的行数和列数都是固定的,如果不确定输入的行数和列数,可以根据需要使用动态内存分配来创建二维数组。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-20 13:21
fgets()函数可以读取一维字符数组(也就是字符串),而不能直接读取二维数组。这是因为fgets()函数是按行读 ...
@FishC, *(pos + j)与 pos 等价吗? liyifeng295641 发表于 2024-03-23 10:55
@FishC, *(pos + j)与 pos 等价吗?
是的,*(pos + j) 与 pos 是等价的。在C语言中,对于指针变量pos来说,pos与pos是等价的,而*(pos + j)则表示pos指针所指向的地址偏移j个元素后的值。
例如,假设有一个指针变量pos指向一个整型数组,那么pos表示的是数组的第一个元素,*(pos + 0)也表示的是数组的第一个元素的值。同样的道理,pos表示的是数组的第二个元素,*(pos + 1)也表示的是数组的第二个元素的值,依此类推。
下面是一个示例代码来演示这个概念:
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int *pos = arr;// 指针指向数组的首地址
printf("pos: %d\n", pos);// 输出:1
printf("*(pos + 0): %d\n", *(pos + 0));// 输出:1
printf("pos: %d\n", pos);// 输出:2
printf("*(pos + 1): %d\n", *(pos + 1));// 输出:2
return 0;
}
以上代码中,通过pos作为指针变量,可以使用pos或*(pos + i)来访问数组arr中的元素,两者是等价的。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]