我想把一个大字符数组作为输入
例如:L=[1,2,3,4,5]
new_L=[L*2]
print(new_L)
其中char array[c][d]
和c <= 200000
。
C编程语言中是否有任何方法可以将这样的字符数组作为输入?
答案 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);