
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]

Powered by ITPUB论坛