C like string inverse不能用于输入C like string with少于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'} ;的输出是这样的:F d c b a,这很好,有人知道我在这里遗漏了什么吗?

char cStrg[3] = {'a','b','c'};不是空终止字符串,如reverse函数所期望的那样。您应该将其替换为char cStrg[4] = {'a', 'b', 'c', 0};char* cStrg = "abc";

C字符串-以字符结尾的字符序列。 C语言中处理这类字符串的所有标准函数。所以,如果你想在C中使用string,你必须指定它

例子:

`char str1[3] = {'a', 'b', 'c'};` // it's just array of characters and that's it
`char str2[3] = {'a', 'b', 'c',''};` // it's valid C-string 

如果您忘记将''指向数组的末尾-您将不会有"真正的"C-string。因此,如果您尝试使用str1与string一起工作,您将检索UB

char* str = "abc"; // that's like {'a', 'b', 'c', ''}; // '' character will be added automatically

最新更新