繁体   English   中英

如何使用一维数组在C中存储多个字符串或创建字符串数组?

[英]How store multiple string or create an array of strings in C, by using 1D array?

有什么办法可以在一个数组中获取多个字符串?

#include <stdio.h>
int main (void)
{
        char str[4] = {"Linux", "Ubuntu", "Arch", "Void"};
        for (int i = 0; i < 4; i++) {
                printf("%d", str[i]);
                printf("%s", str[i]);
        }
        printf("%s", str);
}

我只是想做。 但是没明白吗?

如何使用一维数组在C中存储多个字符串或创建字符串数组?

简短的答案是: 您不能

C语言中的字符串本身就是一个char数组(带有零终止),因此无法在一维数组中包含多个字符串。

您可以将其设为2D数组,例如:

int main()
{
  // Make a 2D array to store
  // 4 strings with 9 as max strlen
  char str[4][10] = {"Linux", "Ubuntu", "Arch", "Void"};

  for (int i=0; i<4; ++i) printf("%s\n", str[i]);
  return 0;
}

另一种方法是使用一维char指针数组来表示字符串文字 ,例如:

int main()
{
  // Make a 1D array to store
  // 4 char pointers
  char *str[4] = {"Linux", "Ubuntu", "Arch", "Void"};

  for (int i=0; i<4; ++i) printf("%s\n", str[i]);
  return 0;
}

但请注意,字符串未保存在数组中。 编译器将字符串放置在内存中的某个位置,而数组仅保存指向这些字符串的指针。

还要注意,在第二个示例中,您稍后不能在程序中修改字符串。 在第一个示例中,允许您在初始化之后更改字符串,例如,进行strcpy(str[0], "Centos");

顺便说一句:这可能很有趣字符串文字常量吗?

可以多个字符串存储在一维数组中-问题是访问超出初始字符串的任何内容。 例如:

char strs[] = “foo\0bar\0bletch\0blurga”;

一维数组strs包含4个字符串,但是如果将strs传递给任何库函数,则仅使用”foo” 。我们需要在strs维护一个单独的指针数组,以访问除第一个字符串之外的任何内容:

char *ptrs[] = {strs, &strs[4], &strs[8], &strs[15]};

如果您需要字符串在内存中是连续的,那么这是一个有效的方法,但是它很麻烦,如果您需要更新其中的任何一个字符串,都会带来极大的痛苦。 最好使用2D阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM