鱼C论坛

 找回密码
 立即注册
查看: 1205|回复: 11

[已解决]如何获取二维数组的长度

[复制链接]
发表于 2022-2-5 15:39:35 | 显示全部楼层 |阅读模式
5鱼币
如何获取二维数组的长度
最佳答案
2022-2-5 15:39:36
$ cat main.c
#include <stdio.h>

int d0[10][20];

void func(int x0[20][30]) {
    printf("x0: %lu\n", sizeof(x0));
}

int main(void) {
    int d1[20][30] = {0};
    printf("d0: %lu\n", sizeof(d0));
    printf("d1: %lu\n", sizeof(d1));
    func(d1);
    return 0;
}
$ gcc-debug -o main main.c
main.c: In function ‘func’:
main.c:6:31: warning: ‘sizeof’ on array function parameter ‘x0’ will return size of ‘int (*)[30]’ [-Wsizeof-array-argument]
    6 |     printf("x0: %lu\n", sizeof(x0));
      |                               ^
main.c:5:15: note: declared here
    5 | void func(int x0[20][30]) {
      |           ~~~~^~~~~~~~~~
$ ./main
d0: 800
d1: 2400
x0: 8
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 15:39:36 | 显示全部楼层    本楼为最佳答案   
$ cat main.c
#include <stdio.h>

int d0[10][20];

void func(int x0[20][30]) {
    printf("x0: %lu\n", sizeof(x0));
}

int main(void) {
    int d1[20][30] = {0};
    printf("d0: %lu\n", sizeof(d0));
    printf("d1: %lu\n", sizeof(d1));
    func(d1);
    return 0;
}
$ gcc-debug -o main main.c
main.c: In function ‘func’:
main.c:6:31: warning: ‘sizeof’ on array function parameter ‘x0’ will return size of ‘int (*)[30]’ [-Wsizeof-array-argument]
    6 |     printf("x0: %lu\n", sizeof(x0));
      |                               ^
main.c:5:15: note: declared here
    5 | void func(int x0[20][30]) {
      |           ~~~~^~~~~~~~~~
$ ./main
d0: 800
d1: 2400
x0: 8
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 15:49:18 | 显示全部楼层
如果没有作为参数传递过的话,可以用 sizeof
$ cat main.c
#include <stdio.h>

int d0[10];

void func(int x0[20]) {
    printf("x0: %lu\n", sizeof(x0) / sizeof(x0[0]));
}

int main(void) {
    int d1[20] = {0};
    printf("d0: %lu\n", sizeof(d0) / sizeof(d0[0]));
    printf("d1: %lu\n", sizeof(d1) / sizeof(d1[0]));
    func(d1);
    return 0;
}
$ gcc-debug -o main main.c
main.c: In function ‘func’:
main.c:6:31: warning: ‘sizeof’ on array function parameter ‘x0’ will return size of ‘int *’ [-Wsizeof-array-argument]
    6 |     printf("x0: %lu\n", sizeof(x0) / sizeof(x0[0]));
      |                               ^
main.c:5:15: note: declared here
    5 | void func(int x0[20]) {
      |           ~~~~^~~~~~
$ ./main
d0: 10
d1: 20
x0: 2
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-5 16:01:03 | 显示全部楼层

不能使用strlen函数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 16:05:39 | 显示全部楼层
摸你穷 发表于 2022-2-5 16:01
不能使用strlen函数吗

strlen 函数是做什么用的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 16:07:25 | 显示全部楼层
摸你穷 发表于 2022-2-5 16:01
不能使用strlen函数吗

求数组的长度?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 16:09:29 | 显示全部楼层
是求字符串的长度吧
字符串的长度可不等于数组的长度
$ cat main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    char str[100] = "hello";
    printf("%lu\n", strlen(str));
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
5
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-5 16:09:31 | 显示全部楼层
人造人 发表于 2022-2-5 16:05
strlen 函数是做什么用的?

哦哦哦了二位数组输入的是字符串怎么整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 16:10:05 | 显示全部楼层
摸你穷 发表于 2022-2-5 16:09
哦哦哦了二位数组输入的是字符串怎么整

二维数组输入字符串?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 16:12:41 | 显示全部楼层
$ cat main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    char *str[100] = {
        "hello",
        "word",
        "1234abcd",
        NULL
    };
    for(size_t i = 0; str[i]; ++i) {
        printf("%.2lu: %s\n", strlen(str[i]), str[i]);
    }
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
05: hello
04: word
08: 1234abcd
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-5 16:13:09 | 显示全部楼层
人造人 发表于 2022-2-5 16:10
二维数组输入字符串?

哦    直接strlen(变量名)就可以了懂了懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 16:14:32 | 显示全部楼层
$ cat main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    char str[3][100] = {
        "hello",
        "word",
        "1234abcd",
    };
    for(size_t i = 0; i < 3; ++i) {
        printf("%.2lu: %s\n", strlen(str[i]), str[i]);
    }
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
05: hello
04: word
08: 1234abcd
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-6 14:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表