c - 如何获取存储在数组中的字符串长度 (C)

标签 c

  1. 我如何获得下方字符串的长度以及数组大小?

    char str [] = {};

        str[0] = "He";
        str[1] = "llo";
        str[2] =  " Wor";
        str[3] ="ld";
    

  2. 我如何将它们存储在多维数组中?所以这个数组看起来像这样:

    char strstr [size of str][string length of str];

strstr[][] 数组维度应该是
1.str
的数组元素个数 2.str 中所有字符的数量。对于 strstr[3][1],这将是“d”。
如果不首先初始化 str 数组,这是否可能?


[编辑] 我明白了,strstr 的第二个维度没有意义。它应该是 *str 中每个元素的长度,而不是 *str 中的完整字符数 [/编辑]

最佳答案

这可能会满足您的要求,但并不是您所要求的。

#include <stdio.h>

char *strs[] = {
    "foo",
    "bar",
    "bazy"
};

int main() {
    printf("%d - %s\n", strlen(strs[0]), strs[0]);
    printf("%d - %s\n", strlen(strs[1]), strs[1]);
    printf("%d - %s\n", strlen(strs[2]), strs[2]);
    return 0;
}

Output :

3 - foo
3 - bar
4 - bazy

请注意,您只有几种存储数组数组的可能性。您可以执行此解决方案的操作(创建一个指向数组的指针的数组),在一个大数组中创建一个“压缩”数组列表,或者创建一个超大的二维数组。


“压缩”数组将采用以下格式:

char strs[] = "foo\0bar\0bazy"; // array is {f,o,o,\0,b,a,r,\0,b,a,z,y,\0}

这种格式的问题在于访问第一个元素之后的任何内容有些棘手,并且通常涉及在数组中进行线性搜索。 (或者保留一个单独的地址表......就像第一个解决方案一样)


二维数组要求您指定所有大小,如下所示:

char strs[3][5] = {
   "foo",
   "baz",
   "baxy"
};

int main() {
    printf("%d - %s\n", strlen(strs[0]), strs[0]);
    printf("%d - %s\n", strlen(strs[1]), strs[1]);
    printf("%d - %s\n", strlen(strs[2]), strs[2]);
    return 0;
}

这在内存中的布局可能是这样的:

{f,o,o,\0,*,b,a,z,\0,*,b,a,x,y,\0} (the *'s could be anything, most dependent on your compiler)

由于编译器知道每个字符串恰好占用 5 个字节,因此它可以很容易地计算出后面元素的位置。

关于c - 如何获取存储在数组中的字符串长度 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503996/

相关文章:

c - 为 Adium 包装一个 libpurple 插件

c - 是否有适用于 Windows 的开源 C 可视化调试器?

c - 为什么 puts 在以下代码中不起作用?

c - 缩小共轭对的合成除法算法

c - 为什么这个二维指针表示法有效而另一个无效

C语言: Scanning and printing Names

c - 如何在子进程中使用 --leak-check=full 运行 valgrind?

c++ - C MACRO 跟踪现有源代码中的 "for"循环迭代

c - K&R C 练习 3-3 编辑数组中的 char 元素不起作用?

c - 为什么我的 float 打印为 0,即使我使用 scanf 为它输入 13.5?