На данный момент все прекрасно работает
Да, код пока выглядит нормально.
но затем я хотел объединить последние две строки
Почему?Это бессмысленно.
Затем я получил ошибку «lvalue Требуется как унарный» & «операнд».Я предполагаю, что это так, потому что компилятор угрожает всегда в скобках как число
Нет, это потому, что компилятор обрабатывает все, что в скобках, как результат оператора =
.Чтобы получить адрес чего-либо, это должно быть lvalue - адресная область памяти, в которой размещается переменная.
Некоторые операторы в C возвращают результат, который является lvalue, а некоторые нет.Оператор =
этого не делает.Из стандарта:
Оператор присваивания сохраняет значение в объекте, обозначенном левым операндом.Выражение присваивания имеет значение левого операнда после присваивания, но не является lvalue.
Так что вам не следует этого делать.Оставьте код таким, какой он был, и ничего не меняйте:
string[0] = '\0';
return string;
... но все же я хочу знать, можете ли вы обмануть компилятор
Эх, ну, С допускает всевозможные сумасшедшие вещи.Но это не значит, что вы должны это делать.Некоторые примеры кода, которые вы не должны писать:
// BAD, OBFUSCATED CODE, DON'T USE THESE
return *string = '\0', string;
return &string[*string = '\0'];
return &(0<:string:>=0)<:string:>;