Вот функция:
void reverse(char* str)
{
char * endOfString = str ;
char temp ;
if(str)
{
while(*endOfString)
{
++endOfString;
}
--endOfString ;
while(str < endOfString)
{
temp = *str ;
*str++ = *endOfString ;
*endOfString-- = temp ;
}
}
}
и с этим входом:
int main()
{
char cStrg[3] = {'a','b','c'} ;
reverse(cStrg)
return 0 ;
}
Вывод выглядит так:
%%.
Если я введу больший ввод, давайте просто скажем:
char cStrg[6] = {'a','b','c','d','e','f'} ;
вывод выглядит так:
ф е д с б а,
это прекрасно, кто-нибудь знает, что я здесь скучаю?
char cStrg[3] = {'a','b','c'};
не является строкой с нулевым символом в конце, как ожидается reverse
функция. Вы должны заменить его на char cStrg[4] = {'a', 'b', 'c', 0};
или же char* cStrg = "abc";
C строки — это последовательность символов, которая заканчивается \0
персонаж. Все стандартные функции в Си работают с такого рода строкой. Итак, если вы хотите работать со строкой в C, вы должны указать ее.
Пример:
`char str1[3] = {'a', 'b', 'c'};` // it's just array of characters and that's it
`char str2[3] = {'a', 'b', 'c','\0'};` // it's valid C-string
Если вы забыли указать '\0'
в конце массива — у вас не будет «истинной» C-строки. Так что если вы попытаетесь работать с str1
как со строкой вы получите UB.
char* str = "abc"; // that's like {'a', 'b', 'c', '\0'}; // '\0' character will be added automatically