反转一个字符串,奇怪的输出c ++

vol*_*olk 3 c++ string reverse char cstring

好吧,所以我试图在C++中反转一个C风格的字符串,我正在寻找一些奇怪的输出.也许有人能说出一些亮点?

这是我的代码:

 int main(){    

    char str[] = "string";
    int strSize = sizeof(str)/sizeof(char);

    char str2[strSize];

    int n = strSize-1;
    int i =0;


    while (&str+n >= &str){ 
        str2[i] = *(str+n);         
        n--;
        i++;
    }

    int str2size = sizeof(str)/sizeof(char);
    int x;

    for(x=0;x<str2size;x++){
        cout << str2[x];
    }

}
Run Code Online (Sandbox Code Playgroud)

这里的基本思想是将指针指向字符串的结尾,然后使用指针算法将其向后读入新数组.

在这种特殊情况下,我得到一个输出:"gnirts"在任何输出的开头有一个烦人的空间,我假设是空字符?但是当我试图通过递减strSize变量来排除它时,我最终在字符串另一端的一些其他字符可能来自另一个内存块.

有关如何避免这种情况的任何想法?PS :(你们会认为这是扭转字符串的好主意吗?)

小智 7

有效字符串应以空字符结尾.因此,您需要将空字符保留在其原始位置(在字符串的末尾),并仅反转非空字符.所以你会有这样的事情:

str2[strSize - 1] = str[strSize - 1]; // Copy the null at the end of the string

int n = strSize - 2; // Start from the penultimate character
Run Code Online (Sandbox Code Playgroud)