指针无法赋值的问题

七七&小鱼 2007-04-17 04:32:45
char * strupper(char *psz)
{
char * ps = psz;
while (*ps != '\0')
{
*ps = toupper(*ps);
ps ++;
}
return psz;
}
我就是用了一个 upper的函数,然后传入的*ps = toupper(*ps);这句执行完后不能把纸赋给*ps,请问是啥原因?谢谢。
调用的地方如下:
char * h="Af";
char * as= strupper ( h);
我怎么找都觉得没原因。。。
...全文
895 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hagic 2007-04-18
  • 打赏
  • 举报
回复
c语言是可以的,c++有更严格的类型检查,运行会出错,不过可能编译会通过,这要看编译器。
thinkinnight 2007-04-18
  • 打赏
  • 举报
回复
老问题呀老问题
char *c = "abcdefg";
"abcdefg"这里是常量,不能被修改啊
需要
char c[] = "abcdefg";
这里的"abcdefg"作为对字符数组赋值时,非常量字符串,可以赋值。
chenzhiyubuaa 2007-04-17
  • 打赏
  • 举报
回复
"Af"应该是cnost char*,放在数据段。对它的修改的结果是未定义的。
面朝大大海 2007-04-17
  • 打赏
  • 举报
回复
gcc下可以编译通过,但运行时崩溃.
computer_ant 2007-04-17
  • 打赏
  • 举报
回复
在TC中,先在内存中分配空间给字符串“AF”,然后让指针变量指向这个空间,当然可以修改,不会有任何问题的
yinenlai 2007-04-17
  • 打赏
  • 举报
回复
char * h="Af; //h 指向常量字符串是也
v风雪山神庙v 2007-04-17
  • 打赏
  • 举报
回复
char *h="Af";
在tc2.0下可以通过。
Piao_Polar 2007-04-17
  • 打赏
  • 举报
回复
疑问,为什么TC下没事情? 只是被掩盖了吗? 或者是VC太明显了?
colorslife 2007-04-17
  • 打赏
  • 举报
回复
是啊,char *h = "Af";在VC6.0中编译没问题,运行却有问题,可是在TC下倒什么问题都没有
Piao_Polar 2007-04-17
  • 打赏
  • 举报
回复
To : 说米问题的同学

编译米问题,运行有问题~
freshui 2007-04-17
  • 打赏
  • 举报
回复
char *h = "Af";

老问题了

这里h指向的是不可修改的常量字符串区域
要么用数组
要么new一个
lockhall 2007-04-17
  • 打赏
  • 举报
回复
char *h = "Af";是放在常量存储区的

不可以修改!
chensanniang 2007-04-17
  • 打赏
  • 举报
回复
程序无问题,在TC和VC下都能通过编译.
#include <stdio.h>
char * strupper(char *psz)
{
char * ps = psz;
while (*ps != '\0')
{
*ps = toupper(*ps);
ps ++;
}
return psz;
}

int main(void)
{
char * h="Af";
char * as= strupper ( h);
printf("%s",as);
return 0;
}
guopeixin 2007-04-17
  • 打赏
  • 举报
回复
char * h="Af"; Af放在常量存储区的不能修改。--->char h[] = "Af";

至于楼上的说不存在任何问题,你把程序放在VC里运行下看看。
呵呵 我确实没有在VC环境下实验过 不好意思
computer_ant 2007-04-17
  • 打赏
  • 举报
回复
我用的TC3,也可以正常通过,是不是你的toupper函数有问题?
我的程序如下:

#include <stdio.h>
char toupper(char str)
{
return (str>='a'&&str<='z')?str-32:str;
}
char * strupper(char *psz)
{
char * ps = psz;
while (*ps != '\0')
{
*ps = toupper(*ps);
ps ++;
}
return psz;
}
void main ()
{
char * h="jfaoKJA88a";
char * as=strupper(h);
printf("%s\n",as);
}
bargio_susie 2007-04-17
  • 打赏
  • 举报
回复
char * h="Af"; Af放在常量存储区的不能修改。--->char h[] = "Af";

至于楼上的说不存在任何问题,你把程序放在VC里运行下看看。
guopeixin 2007-04-17
  • 打赏
  • 举报
回复
另外,我想知道你是怎么验证执行完*ps = toupper(*ps)后,你怎么判断不能把纸赋给*ps的?
guopeixin 2007-04-17
  • 打赏
  • 举报
回复
个人觉得这段程序不存在任何问题,所以在自己电脑上运行了一下,完全能够实现大小写转化的功能。我的编译环境是TC2.0,你出现了什么错误呀
cby1990 2007-04-17
  • 打赏
  • 举报
回复
In order for toupper to give the expected results, __isascii and isupper must both return nonzero.
iu_81 2007-04-17
  • 打赏
  • 举报
回复
char * h="Af";不能修改常量
加载更多回复(1)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧