为什么字符串结尾有两个空格??
 #if 1
#include<stdlib.h>
#include<iostream>
using namespace std;
char* Reverse(char* s)
{
    //将q指向字符串最后一个字符
    char* q = s ;
    int j=0;
    while( *q++ ) 
    {
        j++;
    }
    cout<<j<<endl;
    q-=2;//为何要减去2?

    //分配空间,存储逆序后的字符串。
    char* p = new char[sizeof(char) * (q - s + 2)] ; 
    char* r = p ;

    // 逆序存储
    while(q >= s)
        *p++ = *q-- ;
    *p = '\0' ;

    return r ;
} 
int main()
{char *m="1234567";
    char *n=Reverse(m);
    cout<<n<<endl;
    system("pause");
    return 0;

代码运行无问题,功能已实现了逆序。但是调试的时候发现while中居然有两次空格,请求帮忙解答。

3个回答

没看懂你要问啥?至于指针q为何减2,是因为while(*q++)循环后,q指针后移了一位,并且要去掉 '\0’的位置故q还得减1,即q-2。

当q指向'0'时,还要执行一次++,然后while循环结束

u012734899
tmtyht520 谢谢,又做了一次判断,只是没进函数题。所以是'\0'+1,然后多做的判断又+1,所以-2才到7.谢谢已经了解透彻。
接近 5 年之前 回复
 *q++  ==>   取 a=*q ,   再 q+=1 , 然后返回 a 的值. 这个是 指针加1
 也就是1234567这个字符串
    1           2          3         4             5                6                  7              ‘\0
 地址1     地址2   地址3   地址4      地址5         地址6            地址7          地址8        地址9

 当值为7的时候,地址已经指向地址8了,当值为\0结束while循环的时候,地址已经指向地址9了,为了指向地址7,就要地址减2

u012734899
tmtyht520 谢谢
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
link中字符串后面加上两个问号是什么运算符?有什么作用?谢谢。
2
link中为什么说字符串是只读的,但是我可以改变字符串,这是怎么回事?
5
JavaScript删除字符串前后的空格,空格不止一个
4
字符串与字符串常量与字符串序列的区别
2
java中如果键盘输入一个字符串,这个字符串为一个空格……
7
java 关于字符串的分割
12
java 关于字符串分割问题新人求助
1
c语言去除控制台输入字符串的空格
4
java两对5个共10个字符串比对
6
用c#编写一个程序,以最原始的方法进行两个字符串的四则运算
4
编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。
3
从两个表,都是字符串类型,从中寻找至少有3个字符相同的
4
编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数
3
课后思考题2:C语言用递归算法,将一个字符串逆序输出,提示:字符串以'\0'结尾。
5
编写程序,输入任意一个含有空格的字符串(至少10个字符),删除指定字符后输出该字符串。
5
编写程序,输入字符串S1和S2 以及插入位置n,在字符串S1中的指定位置n处插入字符串S2。
3
C++小程序,,关于字符串
2
Android 一个变量包含两个字符串 怎么把这两个字符串分别赋值给另外两个变量
1
QT比较中文字符串是否相等
1
MFC用fscanf去读取字符串,字符串中间不能有空格么?