在c中输入大字符数组作为输入

时间:2018-02-14 18:43:57

标签: c

我想把一个大字符数组作为输入 例如:L=[1,2,3,4,5] new_L=[L*2] print(new_L)
其中char array[c][d]c <= 200000

C编程语言中是否有任何方法可以将这样的字符数组作为输入?

2 个答案:

答案 0 :(得分:0)

声明数组后,您可以使用calloc函数来为数组指定大小。所以你的代码大致如下:

char** array;
array = calloc(c, sizeof(char*));

并没有必要,因为它将自动改变,以定义第二个值。但如果你还想要,你可以写:

for (int i = 0; i < c; i++)
    array[i] = calloc(d, sizeof(char));

答案 1 :(得分:0)

  

在c ...中输入大尺寸字符数组作为输入    在C编程语言中是否有任何方法可以输入这样的字符数组?

如果代码真正需要同时保留所有c&lt; = 200000个测试用例...

是的,一次读一个,然后按其长度分配。肯定不需要char array[200000][500000]数组。改为使用char *指针数组。

#define c_MAX  200000
#define d_MAX  500000

// Allocate pointer array and a single buffer for reading the lines
char **array = malloc(sizeof *array * c_MAX); 
if (array == NULL) Handle_OutOfMemory();
char *buffer = malloc(sizeof *buffer * (d_MAX + 3));  // Add room for 1 extra, \n, \0
if (buffer == NULL) Handle_OutOfMemory();

size_t c_count = 0;
while (fgets(buffer, d_MAX + 3, stdin)) {
  if (c_count >= c_MAX) Handle_too_many_lines();
  size_t len = strlen(buffer);

  // lop off potential \n
  if (len > 0 && buffer[len-1] == '\n') {  // lop off potential \n
    buffer[--len] = '\0';
  }
  if (len > d_MAX) Handle_too_long_a_line();

  // Make a copy 
  size_t sz = sizeof array[c_count][0] * (len + 1);
  array[c_count] = malloc(sz);
  if (array[c_count] == NULL) Handle_OutOfMemory();
  memcpy(array[c_count], buffer, sz);
  c_count++;
}
free(buffer);

// TBD code
// Right-size `array` if desired with realloc()

// Use the `c_count` elements of `array`

// when done free them all
for (size_t i = 0; i< c_count; i++) {
  free(array[c_count]);
}
free(array);