gpt4 book ai didi

c - C 中的输出文本 block

转载 作者:行者123 更新时间:2023-11-30 18:46:22 25 4
gpt4 key购买 nike

我有一个大字符数组data,我想一次将其输出到终端 30 行。因此,我决定计算每组 30 个换行符之间的字符数,这样我就可以将 strncpy 偏移那么多。但是,当我打印出来时,我没有得到任何输出。一定有什么小问题,但我看不出哪里出了问题。

char* data;
int blocks[100], block_sizes[100];
int traversed, block_idx, nl_chars, i, len, chars;
char* block;

// Determine output blocks
nl_chars = 0;
block_idx = 1;
blocks[0] = 0;
chars = 0;
len = strlen(data);
for (i = 0; i < len; i++) {
chars++;
if (data[i] == '\n') {
nl_chars++;
}

if (data[i] == '\0' || nl_chars == 30) {
blocks[block_idx] = i;
block_sizes[block_idx - 1] = chars;
block_idx++;
nl_chars = 0;
chars = 0;
}
}

// Output blocks to stdout
traversed = 0;
while (traversed < block_idx) {
block = malloc(block_sizes[traversed] * sizeof(char));
if (block == NULL) {
error("[-]Unable to allocate required memory");
}
strncpy(block, data + blocks[traversed], block_sizes[traversed]);
printf("%s", block);
free(block);

while (1) {
memset(input, 0, BUFFER_SIZE);
fgets(input, sizeof(input), stdin);
fflush(stdin);
if (input[0] == '\n' || input[0] == '\r') {
break;
}
}

traversed++;
}

最佳答案

i <= len当你想要处理终止 \0 时循环内。最好让 block_idx从0开始,所以第二个循环也有一个可以理解的条件(block_count?)。

所以:strlen返回不包括终止符 \0 的字符数。也许更好:

block = malloc((block_sizes[traversed] + 1) * sizeof(char));
block[block_sizes[traversed]] = '\0';

关于c - C 中的输出文本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51932150/

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