ITPUB论坛 » Java入门与认证版 » C问题(奇怪)
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-7-1 18:38 未完成WIND
C问题(奇怪)

int lower(char *strOdata)
{
        int Loop = 0;
       
        if (strOdata == NULL) {
                return 1;
        }

        if (strOdata[0] == '') {
                return 1;
        }

        while( strOdata[Loop] != '' ) {
                if( isupper(strOdata[Loop]) != 0 ) {
                        *(strOdata+Loop) = strOdata[Loop] + 32;
                }
                Loop++;
        }

        return 0;
}

*(strOdata+Loop) = strOdata[Loop] + 32;这句会报错。。。。。。为什么呢?很正常的修改指针所指向的空间的值啊。。。。?

2008-7-1 19:44 Sky-Tiger
什么错误?
你的char指针是只读的?

2008-7-1 21:24 justforregister
c都还给老师了

2008-7-3 17:50 laobai1982
整点国家等级考试的还行!

2008-7-18 15:55 voca
*(strOdata+Loop) = strOdata[Loop] + 32;
不太明白在干什么呢

2008-7-18 21:48 justforregister
似乎是大小写转换

2008-7-18 22:02 X二
除非你这个字符串肯定包含一个‘?’,否则,指针会越界的。。。估计是0xC0000005之类的错误

2008-7-18 22:43 justforregister
[quote]原帖由 [i]X二[/i] 于 2008-7-18 22:02 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10996947&ptid=1014900][img]http://www.itpub.net/images/common/back.gif[/img][/url]
除非你这个字符串肯定包含一个‘?’,否则,指针会越界的。。。估计是0xC0000005之类的错误 [/quote]
高手啊

2008-7-23 21:14 royaldragon
while( strOdata[Loop] != '' )

判断循环结束的条件不成立,因此会超出字符串的范围。

2008-8-3 11:27 yarao
int lower(char *strOdata)
{
        int Loop = 0;
        
        if (strOdata == NULL) {
                return 1;
        }

[color=red]        if (strOdata[0] == '') {[/color]
                return 1;
        }

[color=red]        while( strOdata[Loop] != '' ) {[/color]
                if( isupper(strOdata[Loop]) != 0 ) {
                        *(strOdata+Loop) = strOdata[Loop] + 32;
                }
                Loop++;
        }

        return 0;
}
红颜色的两句是有问题的。
应该写为strOdata[0] == 0 或 strOData[0] =='\0'
while那里也一样应该是 while( strOdata[Loop] != '\0' ) 或while( strOdata[Loop]!=0 )才对。
如果不这样的话的,就像楼上说的,你的strOdata很有可能越界了,所以要出错。

另外*(strOdata+Loop) = strOdata[Loop] + 32; 改成 strOdata[Loop] = toupper( strOdata[Loop] )的可读性更高一些

原来'\0'显示出来是''

[[i] 本帖最后由 yarao 于 2008-8-3 14:19 编辑 [/i]]

2008-8-3 11:52 Sky-Tiger
[quote]原帖由 [i]X二[/i] 于 2008-7-18 22:02 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10996947&ptid=1014900][img]http://www.itpub.net/images/common/back.gif[/img][/url]
除非你这个字符串肯定包含一个‘?’,否则,指针会越界的。。。估计是0xC0000005之类的错误 [/quote]
;)

UNIX下就不会有0xC0000005之类的保护错!

而是总线错误!:cool:

页: [1]
查看完整版本: C问题(奇怪)


Powered by ITPUB论坛