You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计字符串数组有效元素数?如何传递字符串数组给函数?

问题解答

一、统计数组中有效字符串的数量

你用sizeof(array)/sizeof(array[0])得到的是数组总容量(128),而非实际填充的有效元素数。有两种可靠解决方式:

1. 复用现有计数器i

在你的代码中,每次添加有效字符串时都会执行i++,只要在循环前将i初始化为0,循环结束后i的值就是有效字符串的数量,这是最高效的方式:

int i = 0; // 初始化计数器
while ((read = getline(&line, &len, fp)) != -1) {
    if (strstr(line, "192.168.101.2") != NULL) {
        printf("%s\n", line);
        strcpy(array[i], line);
        i++;
    }
}
// 此时i即为有效元素数量
printf("有效字符串数量:%d\n", i);

2. 遍历数组统计非空元素

如果没有跟踪计数器i,可遍历数组检查每个元素是否为空(首字符为'\0'):

int count = 0;
// 先确保未使用的数组元素被初始化为空
memset(array, 0, sizeof(array));
// 遍历统计
for (int j = 0; j < 128; j++) {
    if (array[j][0] != '\0') {
        count++;
    }
}
printf("有效字符串数量:%d\n", count);

二、正确传递二维字符串数组给函数

你原声明void array_length(char array[int][int]);语法错误,C语言传递二维数组时需明确第二维大小,或先传递尺寸参数。以下是两种正确写法:

方式1:明确指定第二维大小

因为你的数组是char array[128][128],第二维固定为128,函数声明可写为:

// 参数1:二维数组,参数2:数组总行数
void array_length(char array[][128], int total_rows);

调用时直接传入数组名和总行数:

array_length(array, 128);

方式2:使用指向数组的指针

等价写法是用指针指向长度为128的char数组:

void array_length(char (*array)[128], int total_rows);

调用方式与上述一致。

可选:使用变长数组(VLA)

若需灵活处理不同大小的数组,可先传递行列尺寸,再声明变长数组:

void array_length(int rows, int cols, char array[rows][cols]);

调用时传入具体行列数:

array_length(128, 128, array);

内容的提问来源于stack exchange,提问作者RDP1998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:20:24