标题:Error:lvalue required as increment operand,这个是什么问题?谁帮忙看下 ...
取消只看楼主
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
结帖率:100%
已结贴  问题点数:10 回复次数:9 
Error:lvalue required as increment operand,这个是什么问题?谁帮忙看下?

while(*(str+len)!='\0')
改成这样应该可以了!!
谢谢大家耐心的指导!!非常感谢!!



下面是书上给的程序:
#include<stdio.h>
main()
{
    int len;                                    /*定义len为基本整型变量*/
    char *str[100];                            /*定义字符型指针数组str*/  //编译的时候会警告,但不影响结果,改成char *str[100];就没问题了
    printf("please input a string:\n");
    gets(str);                                /*gets函数将输入的字符串放入数组str中*/
    len=length(str);                            /*调用length函数*/
    printf("%d\n",len);                        /*将结果输出*/
}
int length(char *p)                            /*自定义函数length*/
{
    int n=0;                                    /*定义变量n为基本整型*/
    while(*p!='\0')                            /*当指针未指到字符串结束标志时执行循环体语句*/
    {
        n++;                                    /*长度加1*/
        p++;                                    /*指针向后移*/
    }
    return n;                                /*返回最终长度*/
}
这样为啥就可以了呢?
虽然他定义了一个函数,用指针p去操作
但是最终在main函数中,str还是会传给int length(char *p)    这个函数,进行里面的++操作的
为啥这样就可以了?


[ 本帖最后由 计算机之祖 于 2015-9-7 23:03 编辑 ]
搜索更多相关主题的帖子: required include please 
2015-09-07 19:52
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 5楼 TonyDeng
while(*str++!='0')
或者把++运算放到循环体内
看书上貌似都这么写的
暂时没发现啥问题
还得再研究一下
2015-09-07 22:19
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 6楼 诸葛欧阳

不行啊
把自增运算放倒后while循环头
或者循环体内
我试了都是提示这个错误
2015-09-07 22:22
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 4楼 jklqwe111

这样可以编译通过了
但是运行结果有问题
计算出的字符串长度恒定为93了
2015-09-07 22:26
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 10楼 诸葛欧阳
不是吧
这里需要取指针对应地址的内容啊
所以需要*str吧
2015-09-07 22:29
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 12楼 林月儿
刚试了,可以通过编译和运行
但是运行结果有问题

楼上我刚刚截了个图
2015-09-07 22:30
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 15楼 诸葛欧阳
while(*(str+len)!='\0')
这样应该可以了

但是还是搞不明白,为啥++就不行了
2015-09-07 22:38
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 4楼 jklqwe111
while(*(str+len)!='\0')--》改成这个可以了
前面我弄错了,不好意思,对C语言不熟悉,罪过
最后判断应该是结束字符‘\0’
2015-09-07 22:41
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 17楼 jklqwe111
#include<stdio.h>
main()
{
    int len;                                    /*定义len为基本整型变量*/
    char *str[100];                            /*定义字符型指针数组str*/
    printf("please input a string:\n");
    gets(str);                                /*gets函数将输入的字符串放入数组str中*/
    len=length(str);                            /*调用length函数*/
    printf("%d\n",len);                        /*将结果输出*/
}
int length(char *p)                            /*自定义函数length*/
{
    int n=0;                                    /*定义变量n为基本整型*/
    while(*p!='\0')                            /*当指针未指到字符串结束标志时执行循环体语句*/
    {
        n++;                                    /*长度加1*/
        p++;                                    /*指针向后移*/
    }
    return n;                                /*返回最终长度*/
}
但是这样为啥就可以了呢?
虽然他定义了一个函数,用指针p去操作
但是最终在main函数中,str还是会传给int length(char *p)    这个函数,进行里面的++操作的
为啥这样就可以了?
2015-09-07 22:51
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
得分:0 
回复 20楼 jklqwe111
有点糊涂了,呵呵
我说下我理解的吧:

数组名str作为实参传给p,仅仅是把这个地址值传给p了
之后一切循环运算,包括++,都是基于p本身运算的,和str无关了

而数组名,作为数组首地址,在数组内存分配之后,就已经确定了
是不能进行++或者--运算的

这就有点类似于于,char *p="jiosjkoskjs";
这里指针无权修改字符串常量的值,只能修改本身的地址 去指向其他字符串
2015-09-07 23:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-457076-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077717 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved