gpt4 book ai didi

c - 扩展c中字符串数组的大小

转载 作者:行者123 更新时间:2023-11-30 16:34:43 25 4
gpt4 key购买 nike

我试图从用户那里获取字符串,然后在用户输入长字符串时扩展字符串的大小,如果用户输入的字符串多于预期,则扩展保存字符串的数组的大小。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

int main(int argc, char* argv[])
{
int number_of_strings = 5;
int string_size = 5;
int count = 0;
char **array = (char**)calloc(number_of_strings, sizeof(char*));
for (int i = 0; i < number_of_strings; i++)
{
array[i] = (char*)calloc(string_size + 1, sizeof(char));
}

////////////////////////////MAIN PART///////////////////////////////////////////////
int arr_size = number_of_strings;
int str_count = 0; //Total number of input strings counter

for (int j = 0; j < arr_size; j++)
{
if (arr_size >= str_count) //Check if the number of input strings is more than expected
{
array = (char**)realloc(array, (arr_size + 1) * sizeof(char*)); //allocate memory for 1 more string
arr_size++; //Increase the loop rounds
}

int str_size = string_size;
int char_count = 0; //Total number of input characters counter

for (int h = 0; h < str_size; h++)
{
if (str_size >= char_count) //Check if the input string size is more than expected
{
array[j] = (char*)realloc(array[j], (str_size + 1) * sizeof(char)); //allocate memory for 1 more char
str_size++; //Increase the loop rounds
}
scanf(" %c", &array[j][h]); //get a single char
char_count++; //Increment the total input character count
}
str_count++; //Increment the total input string count
}
////////////////////////////////////////////////////////////////////////////////////

for (int k = 0; k < number_of_strings; k++)
{
printf("%s", array[k]);
free(array[k]);
}
free(array);

return 0;
}

输入:这不是它看起来的样子,但我不知道为什么会发生这种情况
输出:空标准输出。超出时间限制
预期输出:ThisisnotwhatitlookslikebutIdon'tknowwhyisthisishappening

程序长时间等待用户输入,并且即使用户没有输入任何输入,它也不会停止扫描输入,因此最终程序崩溃。

我认为该错误是由于数组重新分配不当造成的。非常感谢任何关于为什么会导致此错误以及如何修复它的想法。谢谢!

最佳答案

目前尚不清楚您要做什么。下面是代码中的一些问题:

  • 您故意忽略输入中的空格,那么如何检测字符串边界?
  • 所有输入都集中到一个字符串中,内部循环永远不会停止。
  • 您也不检查 EOF:如果遇到输入流末尾,则循环继续,重新分配内存,直到系统崩溃或分配失败...
  • 分配失败也未经过测试,因此在所有情况下都存在未定义的行为。
  • 在 C 中不需要强制转换 malloccalloc 的返回值。在 C++ 中这是必要的,但你肯定会想使用C++ 中的不同方法。为了避免类型差异,您可以使用目标指针的类型而不是对其进行硬编码:要重新分配数组,请替换 array = (char**)realloc(array, (arr_size + 1) * sizeof(char* ));

    array = realloc(array, sizeof(*array) * (arr_size + 1)); 

关于c - 扩展c中字符串数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49217912/

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