在C中反转数组

use*_*217 0 c arrays string

我是cpp的新手并且有关于数组的问题.我下面的代码应该创建一个反转版本的str并将其存储在newStr中.但是,newStr总是空着.有人可以向我解释为什么会发生这种情况,即使我正在从str中分配一个值吗?

void reverse (char* str) {
    char* newStr = (char*)malloc(sizeof(str));

    for (int i=0;i<sizeof(str)/sizeof(char);i++) {
       int index = sizeof(str)/sizeof(char)-1-i;
       newStr [i] = str [index];
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:我知道通过移动指针或使用std :: reverse函数来反转数组效率要高得多,但我感兴趣的是为什么上面的代码不起作用.

Jam*_*mes 6

如上所述,评论者指出sizeof(str)并没有告诉你字符串的长度.你应该用size_t len = strlen(str);

void reverse (char* str) {
   size_t len = strlen(str);
   char* newStr = (char*)malloc(len + 1);

   for (int i=0; i<len;i++) {
      int index = len-1-i;
      newStr[i] = str[index];
   }
   newStr[len] = '\0'; // Add terminator to the new string.
}
Run Code Online (Sandbox Code Playgroud)

不要忘记free你的任何记忆malloc.我假设你的函数将返回你的新字符串?

编辑:+1的长度为终结者腾出空间.