在C中,在一个类似于
的数组中"ad","aasb","asdf","asdfsd"
如何获得不同类型的长度,例如:
"aasb"
ViewController
)是5)。答案 0 :(得分:3)
您可以使用sizeof
运算符获取所有尺寸(3 x 4 x 7)的尺寸。
如果您想知道最后一个的长度,请在循环中使用strlen
:
#include <stdio.h>
#include <string.h>
int main(void)
{
char data[][4][7] = {{"gsga","baf"},{"ad","aasb","asdf","asdfsd"},{"ads","sd","sd"}};
size_t items1 = sizeof data / sizeof data[0]; /* size of dim 1 */
size_t items2 = sizeof data[0] / sizeof data[0][0]; /* size of dim 2 */
size_t iter1, iter2, count, len;
printf("%zu items\n", items1);
for (iter1 = 0; iter1 < items1; iter1++) {
count = 0;
printf("Item %zu\n", iter1);
for (iter2 = 0; iter2 < items2; iter2++) {
len = strlen(data[iter1][iter2]); /* size of dim 3 */
if (len > 0) {
printf("\tSubitem %zu: %zu characters\n", iter2, len);
count++;
}
}
printf("\t%zu subitems\n", count);
}
return 0;
}
输出:
3 items
Item 0
Subitem 0: 4 characters
Subitem 1: 3 characters
2 subitems
Item 1
Subitem 0: 2 characters
Subitem 1: 4 characters
Subitem 2: 4 characters
Subitem 3: 6 characters
4 subitems
Item 2
Subitem 0: 3 characters
Subitem 1: 2 characters
Subitem 2: 2 characters
3 subitems
data
也可以声明为
char *data[][4] = {{"gsga","baf"},{"ad","aasb","asdf","asdfsd"},{"ads","sd","sd"}};
但是你需要检查NULL
以获得(非空)子项的数量:
for (iter2 = 0; iter2 < items2; iter2++) {
if (data[iter1][iter2] != NULL) {
len = strlen(data[iter1][iter2]);
...
}
}
答案 1 :(得分:0)
以下程序打印您提到的值:
#include <stdio.h>
#include <string.h>
#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))
int main(void)
{
const char *A[][4] = {{"gsga", "baf"}, {"ad", "aasb", "asdf", "asdfsd"}, {"ads", "sd", "sd"}};
printf("%d\n", LEN(A)); /*number of rows*/
printf("%d\n", LEN(A[0])); /*number of columns*/
printf("%d\n", (int) strlen(A[1][1]) + 1); /*size of element*/
return 0;
}