我在C方面不是很有经验。我正在尝试使用这样的代码:
声明字符串数组;
删除字符串数组的函数 并插入一组新的字符串(编号未知)
我该怎么做?我知道我可以做const char *a[2];
但是当我声明它时需要输入一个数组大小。我可以为我的字符串数组创建一个可以支持多种大小的变量吗?
答案 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;
}