При подготовке к выпускному экзамену в моей школе у нас возник следующий вопрос:
Найти значения строк s1, s2 и s3 после выполненного кода:
char s1[] = "Short Message Service", *s2, *s3;
s2 = strchr(s1, 'M');
s3 = strrchr(s2,'S');
strncpy(s1 + 1, s2, 1);
strcpy(s1 + 2, s3);
Ожидаемый результат для всего классабыть:
s1 = SMService
s2 = Message Service
s3 = Service
Когда мы проверили его, выполнив код, мы были удивлены, увидев результат:
s1 = SMService
s2 = ice
s3 = Service
Проблема в том, что никто не может понять, почему s2 был сокращен.Пытаясь выяснить это, я обнаружил, что s2 остается «Службой сообщений» до последней строки кода, где выполняется функция «strcpy».Я предполагаю, что проблема может быть в адресах указателей, но я не мог понять, как strcpy влияет на s2.
Поэтому мой вопрос заключается в том, почему s2 - это не то, что мы ожидали, и почему его сократили?