c как строка, обратная не работает для ввода c как строка с менее чем 5 символами

Вот функция:

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'} ; вывод выглядит так:
ф е д с б а,
это прекрасно, кто-нибудь знает, что я здесь скучаю?

0

Решение

char cStrg[3] = {'a','b','c'}; не является строкой с нулевым символом в конце, как ожидается reverse функция. Вы должны заменить его на char cStrg[4] = {'a', 'b', 'c', 0}; или же char* cStrg = "abc";

3

Другие решения

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

0

По вопросам рекламы [email protected]