如何在C中创建字符串数组

时间:2014-03-19 02:00:17

标签: c arrays string pointers

我在C方面不是很有经验。我正在尝试使用这样的代码:

  

声明字符串数组;

     

删除字符串数组的函数          并插入一组新的字符串(编号未知)

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

3 个答案:

答案 0 :(得分:4)

您可以使用指针指针。

char **strings;

以下是创建它的方法:(其中<size>是数组的大小)

strings = malloc(sizeof(char*) * <size>);

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

strings[0] = "hello";
printf("%s", strings[0]);

只是一个警告,内存尚未设置为完全空字符串。如果您希望默认情况下所有字符串都为空,请使用calloc()代替malloc()

strings = calloc(sizeof(char*) , <size>);

答案 1 :(得分:0)

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

   int size;
   char *a[size];
   printf("enter size");
   scanf("%d",&size);

答案 2 :(得分:0)

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

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

char** strings = (char**)malloc(sizeof(char*)*10);

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

strings[0] = malloc(strlen("abcd")+1);
strpcy(strings[0], "abcd");

这是一个展示整个事物的程序:

#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;
}