void str_reverse(char *l, char *r){
char *start = l; //gives while loop place to stop, the start of the string
while (*l != '\0'){
*l++;
} //loops the to the end terminator
*l--; //last character
while (*l != *start){
*r = *l;
*l--;
*r++;
} // adds the string from back to front to new string
*r = '\0';
}
有人告诉我,当我打印出* r时,为什么我错过了第一个角色?例如,你好反转是olle?感谢
答案 0 :(得分:1)
错误是使用解除引用递增指针,如* l ++,并将指针与它们指向的值进行比较。固定代码如下:
void str_reverse(char *l, char *r){
char *start = l; //gives while loop place to stop, the start of the string
while (*l != '\0'){
l++;
} //loops the to the end terminator
l--; //last character
while (l >= start){
*r = *l;
l--;
r++;
} // adds the string from back to front to new string
*r = '\0';
}
答案 1 :(得分:0)
更改为do-while:
do {
*r = *l;
l--;
r++;
// adds the string from back to front to new string
} while (l != start);
*r = '\0';
答案 2 :(得分:0)
几乎没有检查错误。
第一
while(*l != *start)
循环将退出而不复制最后一个字符。
因此检查应基于地址。
while(l >= start)
只需要递增和递减指针*l--
并且*r++
不是你打算做的。
#include <stdio.h>
#include <string.h>
void str_reverse(char *l, char *r){
char *start = l; //gives while loop place to stop, the start of the string
while (*l != '\0'){
*l++;
} //loops the to the end terminator
*l--; //last character
while (l >= start){
*r = *l;
l--;
r++;
} // adds the string from back to front to new string
*r = '\0';
}
int main()
{
char a[20] = "somestring";
char b[20];
str_reverse(a,b);
printf("%s",b);
return 0;
}
答案 3 :(得分:-1)
void str_reverse(char *l, char *r) {
char *start = l; //gives while loop place to stop, the start of the string
while (*l != '\0'){
l++;
} //loops the to the end terminator
l--; //skips \0
while (l >= start){
*r = *l;
l--;
r++;
} // adds the string from back to front to new string
*r = '\0';
}
注意while条件已经改变,指针算术也是正确的。