Ну, вы можете позволить printf
сделать все это за вас, без копирования или инъекции, или вы можете копировать или внедрять, или делать это за символом, как показывает @WilliamPursell (все в порядке), например,
С Printf
#include <stdio.h>
#include <string.h>
#define MAXC 1024 /* if you need a constant, #define one (or more) */
int main (void) {
char line[MAXC]; /* buffer to hold entire line */
while (fgets (line, MAXC, stdin)) { /* read/validate line */
int len = strlen(line); /* get length of line */
if (len == 1) { /* if line only 1-char */
putchar (line[0]); /* can't split 1 - output char */
continue; /* get next line */
}
/* output first 1/2 and second 1/2 */
printf ("%.*s\n%s", len/2, line, line + len/2);
}
}
Использование 2 nd Буфера
#include <stdio.h>
#include <string.h>
#define MAXC 1024 /* if you need a constant, #define one (or more) */
int main (void) {
char line[MAXC]; /* buffer to hold entire line */
while (fgets (line, MAXC, stdin)) { /* read/validate line */
size_t len = strlen(line); /* get length of line */
char first[MAXC/2 + 1]; /* buffer to hold 1st 1/2 */
if (len == 1) { /* if line only 1-char */
putchar (line[0]); /* can't split 1 - output char */
continue; /* get next line */
}
memcpy (first, line, len/2); /* copy 1st 1/2 to first */
first[len/2] = '\n'; /* add newline (or just use puts) */
first[len/2+1] = 0; /* nul-termiante */
fputs (first, stdout); /* output 1st 1/2 */
fputs (line + len/2, stdout); /* output rest */
}
}
И то и другое эквивалентный вывод, например
Пример входного файла
$ cat dat/tosplit.txt
1234
56789
123
bc
Пример использования / Вывод
$ ./bin/splitline < dat/tosplit.txt
12
34
567
89
12
3
b
c
Всегда есть более чем один путь к Skin-the-Cat в C. Дайте мне знать, если у вас есть дополнительные вопросы.