如何统计字符串数组有效元素数?如何传递字符串数组给函数?
问题解答
一、统计数组中有效字符串的数量
你用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
相关产品推荐
相关产品推荐

