C 检查数组中是否存在空间,如果不重新分配更多空间?



>我必须编写一个程序,该程序接受一个字符串参数,如"abcd"并返回一个新字符串,如"a-bb-ccc-dddd"。 因此,对于字符串中的每个字符,在新字符串中增加其重复次数。

在像 C# 或 Java 这样的东西中,我只会使用 StringBuilder,但在 C 中,我不确定如何检查字符串是否有足够的空间容纳新字符。 如果没有,请重新分配。

char *str = malloc(strlen(source) * sizeof(char));
for (int i = 0; i <= strlen(source) - 1; i++)
(for int j = 0; j < i + 1; j++)
if (space_exists_in_string(source))
str[j] = source[i]; 
else {
str = realloc(str, strlen(str) * 2);
str[j] = source[i]
}

所以基本上我希望找到一种方法来检查是否(space_exists_in_string)。

谢谢

如果数组被声明为字符数组,如char arr[],你可以调用sizeof(arr),你会得到数组的大小。但是,如果使用malloc或calloc为其分配了一些堆内存,则无法获取数组的大小,除了调用strlen(),它仅提供字符串的大小,而不是内存位置。因此,要么将字符串声明为字符数组,要么存储创建的内存大小(动态创建时),并在每次扩展/收缩内存时更新它。

在您的情况下,我认为如果您为输出分配一些存储空间并循环访问输入并将数据插入输出,那会很简单。这样,您就知道要分配给输出的数据量,并且不需要扩展它。输出所需的空间为(1 + 2 + 3 + 4 + 5 +... strlen(input) times) + (strlen(input)-1)

最新更新