Fold large input lines into smaller ones
The length() function can be replaced using strlen() (you'll need to include &lt;string.h&gt;).  Note that strlen() doesn't consider the terminating NUL to be part of the string - but that will help fix the current bug that causes this code to print that NUL.

Don't measure the length repeatedly - instead, save it to a variable early on, and refer to that variable.



Error messages should go to standard error stream, not standard output:

if (argc &lt; 3) {
    fprintf(stderr, "Usage: %s input cols\n", argv[0]);
    return 1;
}




Don't use uppercase names for variables - we reserve those for macros; the "SHOUTING" of the name warns us that they need special care.

Also, don't use atof() for converting integers - use atoi(), or better, strtoul(), which can tell you whether it succeeded:

char *parse_end;
size_t col_bound = strtoul(argv[2], &amp;parse_end, 10);
if (parse_end == argv[2] || *parse_end) {
    fprintf(stderr, "Usage: %s input cols\n", argv[0]);
    return 1;
}




Prefer one declaration per line, and initialise immediately:

size_t startCol = 0;
size_t currentCut = 0;
size_t nextBound = 0;
size_t numOfCuts = 0;




Be careful about off-by-one errors.  This inequality should be &lt;, not &lt;=:

while ((nextBound = startCol + col_bound - 1) &lt; length) {


It's not the only one.



Test more inputs.  I tried a very simple case and got unexpected output:

./194156 'a b c d e f' 3


a b
c
d e
f
Original string split into 4 parts(bound was 3)


Why did it not split into 3 lines?