gpt4 book ai didi

c - 如何管理二维字符数组?

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:19 24 4
gpt4 key购买 nike

在阅读了数十个教程和编程指南后,答案并不明显,因此发布了这篇文章。请善待。
手头的问题是对双 d 字符数组的实际操作:{"aaaaa", "bbbbb", "ccccc",... M
第一个问题是声明此类野兽的初始化,以更改字符串“aaaaa”、“bbbbb”等中的数据。
声明和初始化如下:

    char *chararray[M][N + 1] //M & N are set as constant values, the extra 1 for the null terminator.
memset (chararray, '\0', sizeof(chararray)); //Assuming array bounds remain constant, in the hope that dynamic allocation is not required

假设还定义了一个字符串文字:

    char *copyme; //Has been given a string value well within the bounds of N

尝试在 strcat 或 strcat_s(类似 strcpy 或 strcpy_s)中使用它时会出现问题:

    strcat_s (chararray [i][0], N + 1, (char *) copyme);  //i ranges from 0 to M

由于没有遇到任何以这种方式处理数组的代码,我确实注意到了这个 tutorial memcpy 是唯一的方法。正确吗?

此外,如何实现 John Bode 的 General Procedure从 Main 调用函数时? (为简洁起见,这可能必须作为一个单独的问题提交,)

最佳答案

你的初始化是错误的,你声明的是指针的二维数组而不是字符。将其更改为 char chararray[M][N + 1]

另外关于对 memset 的评论,你用静态维度声明了数组,所以边界永远不会改变,如果你选择了上述方法,你就不能使用动态分配。

基本上,在 C 中使用字符串数组时,您有以下选项:

  • 如果您只处理只读字符串文字,您可以为每个文字使用一个const char*。在这种情况下,字符串数组将是 const char* 指针数组。
  • 类似地,如果字符串分配在别处,而不是在您的数组中,您可以有一个指针数组。你会有一个查找表。
  • 如果字符串的长度有一个已知的最大值,您可以用静态维度声明它,例如 char chararray[M][N + 1]。这是一个二维字符数组,或者如果您愿意:字符数组的数组。
  • 如果字符串的长度未知,如果您需要它们具有灵 active ,或者如果您要分配大量字符串(数百个),您可以在堆上分配它们。在这种情况下,您应该使用一个指针数组,其中每个指针都通过 malloc 后跟 strcpy() 分配一个字符串。

关于c - 如何管理二维字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32494381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com