首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C中生成字符串数组

如何在C中生成字符串数组
EN

Stack Overflow用户
提问于 2014-03-19 02:00:16
回答 3查看 105关注 0票数 0

我在C方面不是很有经验,我正在尝试一些像这样工作的代码:

声明字符串数组; 函数,该函数擦除字符串数组并插入一组新字符串(编号未知)。

我该怎么做?我知道我可以做const char *a[2];,但这需要在声明它时输入数组大小。我是否可以为我的字符串数组创建一个可以支持多个大小的变量?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-19 02:06:13

您可以使用指向指针的指针。

代码语言:javascript
复制
char **strings;

下面是如何创建它:(其中<size>是数组的大小)

代码语言:javascript
复制
strings = malloc(sizeof(char*) * <size>);

现在设置/获取元素非常简单:

代码语言:javascript
复制
strings[0] = "hello";
printf("%s", strings[0]);

只是一个警告,内存尚未设置为完全空字符串。如果默认情况下所有字符串都是空的,则使用calloc()而不是malloc()

代码语言:javascript
复制
strings = calloc(sizeof(char*) , <size>);
票数 4
EN

Stack Overflow用户

发布于 2014-03-19 02:33:02

您可以像这样控制数组大小:

代码语言:javascript
复制
   int size;
   char *a[size];
   printf("enter size");
   scanf("%d",&size);
票数 0
EN

Stack Overflow用户

发布于 2014-03-19 02:57:40

您必须使用一个char**,一个指向char指针的指针,通过能够捕获一个动态字符串数组。

如果您想要10个字符串,则必须使用:

代码语言:javascript
复制
char** strings = (char**)malloc(sizeof(char*)*10);

要在数组的第一个元素中存储字符串,必须使用:

代码语言:javascript
复制
strings[0] = malloc(strlen("abcd")+1);
strpcy(strings[0], "abcd");

下面是一个演示整个过程的程序:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
   char string[200];
   char** strings = NULL;
   int numStrings = 0;
   int n = 0;
   int i = 0;

   /* Read the number of strings */
   do
   {
      printf("Enter the number of strings (0 or higher): ");
      n = scanf("%d", &numStrings);
   } while ( n != 1 || numStrings < 0 );

   /* Eat up the remaining characters afte the integer */
   fgets(string, 199, stdin);

   if ( numStrings > 0 )
   {
      /* Read the strings */
      strings = (char**)malloc(numStrings*sizeof(char*));
      for ( i = 0; i != numStrings; ++i )
      {
         printf("Enter a string: ");
         fgets(string, 199, stdin);
         strings[i] = malloc(strlen(string)+1);
         strcpy(strings[i], string);
      }

      /* Print the strings back */
      for ( i = 0; i != numStrings; ++i )
      {
         printf("%s", strings[i]);
      }

      /* Now release the memory back to the system */

      /* First the individual strings */
      for ( i = 0; i != numStrings; ++i )
      {
         free(strings[i]);
      }

      /* Now the array */
      free(strings);
   }

   return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22494792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档