В этом операторе
*fullmsg+(fmsglen+10) = output;
в левой части присваивания используется значение типа int. Вы не можете назначить одно значение другому значению. Кроме того, в правой части находится объект типа char *. Так что в любом случае это назначение не имеет смысла.
Даже если вы перепишете оператор как
fullmsg+(fmsglen+10) = output;
, тем не менее, снова в левой части будет значение, которое может быть не назначаемый.
Кажется, вы имеете в виду что-то вроде следующего
strcpy( fullmsg + fmsglen + 10, output );
То есть вы хотите скопировать строку, указанную указателем output
, в массив символов, на который указывает указатель fullmsg
с заданным смещением fmsglen + 10
.
Также кажется, что вместо этого оператора if
if (*command == 'c' && *command+1 == 'd'){
вы имеете в виду это утверждение
if (*command == 'c' && *( command + 1 ) == 'd'){
И это l oop, даже если вы будете использовать стандартную функцию C strcpy для копирования строки
while (fgets(output, 5000, cmd) != NULL){
strcpy( fullmsg + fmsglen + 10, output );
fmsglen = strlen(fullmsg);
}
не правильно, потому что вы можете добавить 10 несколько раз к длине строки результата.
И это утверждение
sprintf(&fullmsg, "%10lu", strlen(fullmsg));
должно быть переписано, по крайней мере, как
sprintf( fullmsg, "%10zu", strlen( fullmsg ) );
Но это также неправильно, потому что вызов помещает в начале fullmsg
строку (ноль- прекращено), что представляет значение о f выражение strlen( fullmsg )
. Вам нужна отдельная строка размером 11 байтов, которая будет использоваться при вызове sprintf
для преобразования значения в строку, а затем вы можете использовать функцию memcpy
для копирования этой строки в начало строки, на которую указывает fullmsg
.