Причиной неожиданного результата при попытке вывести часть слова «перед соответствием» является то, что в строке слова нет ничего, что могло бы вызвать остановку вызова
printf("start Part %s\n ", startPart);
после него. напечатал первые startLength
символов слова. Когда printf
предписывается печатать строку, он печатает все символы с начальной точки, пока не встретит терминатор \0
. Здесь только \0
находится в конце слова, поэтому printf
печатает все слово.
Если вы хотите напечатать только первые несколько символов слова, вы должны либо создать \0
-конечная строка, содержащая только эти первые несколько символов, или вы должны распечатать их с помощью механизма, который не пытается рассматривать их как строку.
Для создания \0
-конечной строки запуска Вы можете временно перезаписать первый символ совпадения с помощью \0
, затем вызвать printf
, а затем восстановить символ совпадения. Что-то вроде:
char savedFirstMatch = *firstMatch;
*firstMatch = '\0';
printf("start Part %s\n ", startPart);
*firstMatch = savedFirstMatch;
Если вы не хотите этого делать, вы можете использовать for
l oop, чтобы печатать только первые startLength
символы как отдельные символы, а не как строку , перед которым следует printf
или puts
, который испускает любые дополнительные материалы, которые вы хотите напечатать вокруг этих символов. В этом случае дополнительный материал представляет собой строку «начало части» перед символами, а также новую строку и пробел после (при условии, что этот пробел не просто опечатка). Это будет выглядеть примерно так:
puts("start Part ");
unsigned startIndex;
for (startIndex = 0; startIndex < startLength; ++startIndex) {
putchar(startPart[startIndex]);
}
puts("\n ");
Конечно, если вам не нравятся puts
и putchar
, вы можете использовать printf("%s", ...)
и printf("%c", ...)
вместо этого.