gpt4 book ai didi

c - 根据旧数组 malloc、realloc 将新字符添加到新数组

转载 作者:行者123 更新时间:2023-11-30 14:26:00 25 4
gpt4 key购买 nike

我在这个网站上问过一个问题,并使用伪代码得到了回答,但我仍然不知道如何正确解决这个问题

基本上,我传递一个字符数组,以及用户选择的数字,该数字与要添加到数组中的新字符数相关。我想创建一个新数组,其大小 = 旧数组 + 要添加的新字符数,提示用户输入新字符,然后将其添加到新数组(其中重新分配旧字符)。我不知道该怎么做!我很沮丧。

char * add(char * array, int num)
{
/* malloc new_size bytes and assign to new_array
memcpy old_size bytes from old_array into the new_array
add additions into new_array starting from (new_array+old_size)
free the old_araray
return new_array;
*/

}

最佳答案

您将问题标记为“realloc”,因此您可能知道 realloc() 函数。使用它来代替 malloc()memcpy()free()

不过,我在这里没有看到该函数如何知道“旧”数组的大小。它是一个以 null 结尾的字符串吗?如果没有,您需要传递另一个整数来表示现有数组有多大。

假设它是一个以 null 结尾的字符串,您可以执行以下操作:

char *add(char *string, int num) {
// Note, these represent the length *without* the null terminator...
int old_length = strlen(string);
int new_length = old_length + num;

// ...so we add 1 here to make room for the null.
string = realloc(string, new_length + 1); // Error checking omitted

for (int n = old_length; n < new_length; n += 1) {
// Prompt for the new characters; here I'll just assume they're all 'X'.
char new_char = 'X';

string[n] = new_char;
}

string[new_length] = '\0';

return string;
}

如果不是以 null 结尾的字符串,则应传入 old_length 作为参数,而不是使用 strlen() 确定它,不要在其中添加 1 realloc() 调用,并且最后不要将 string[new_length] 设置为 null。其余部分保持不变。

关于c - 根据旧数组 malloc、realloc 将新字符添加到新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9712617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com