我在C方面不是很有经验,我正在尝试一些像这样工作的代码:
声明字符串数组; 函数,该函数擦除字符串数组并插入一组新字符串(编号未知)。
我该怎么做?我知道我可以做const char *a[2];,但这需要在声明它时输入数组大小。我是否可以为我的字符串数组创建一个可以支持多个大小的变量?
发布于 2014-03-19 02:06:13
您可以使用指向指针的指针。
char **strings;下面是如何创建它:(其中<size>是数组的大小)
strings = malloc(sizeof(char*) * <size>);现在设置/获取元素非常简单:
strings[0] = "hello";
printf("%s", strings[0]);只是一个警告,内存尚未设置为完全空字符串。如果默认情况下所有字符串都是空的,则使用calloc()而不是malloc()
strings = calloc(sizeof(char*) , <size>);发布于 2014-03-19 02:33:02
您可以像这样控制数组大小:
int size;
char *a[size];
printf("enter size");
scanf("%d",&size);发布于 2014-03-19 02:57:40
您必须使用一个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;
}https://stackoverflow.com/questions/22494792
复制相似问题