我是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函数来反转数组效率要高得多,但我感兴趣的是为什么上面的代码不起作用.
如上所述,评论者指出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的长度为终结者腾出空间.