Я сделал тест, где появились что-то вроде этого:Причина этого выхода
char* trim(char* strr, char* str1) {
char* s = strr;
while(*str1 == 32) str1++;
while((*str1 != 32) && (*str1 != 0))
*s++ = *str1++;
*s = 0;
return strr;
}
int main(void) {
char str[20] = "???";
char str1[20] =" bcd \0";
printf("(%s)\n(%s)\n", str, trim(str, str1));
return(0);
}
Вопрос был: Что выше код будет печатать и почему? У меня есть ключ к выводам и почему, но я хотел бы услышать от более опытных людей по этому вопросу.
На первый взгляд это выглядит, как он будет печатать:
(???)
(bcd)
, но в действительности выход производства является:
(bcd)
(bcd)
Вы не переписываете str? –
@JaynathanLeung Эта функция не была выполнена до меня, я просто копирую и прошёл. – dreamcrash
Строка str заменяется триммером, так как trim является аргументом и выполняется перед printf. –