你好,我有个C程序问题想请教你,谢谢帮忙解答。

[复制链接]
查看11 | 回复5 | 2010-10-16 01:57:33 | 显示全部楼层 |阅读模式
我的程序是这样的:
#include
void main()
{
char *p = "I am a student.";
char *q = "You are a teacher.";
while(*q++ = *p++);
puts(p);
}
就是要把一个字符串复制到另一个中去。
while(*q++ = *p++)这句通不过,为什么?
最后一行写错了,是puts(q);

回复

使用道具 举报

千问 | 2010-10-16 01:57:33 | 显示全部楼层
1,puts(字符数组的名称或字符串常量);用指针是不对的。 为什么,还不知道。2,虽然你的while在‘\0’赋给*q++终止,但是你的p在自加。也就是说你的p已经知道字符串的NUL的下一个位置了 int puts(const char *s); 注意const哦。这就解决了第一点了。太高兴了!!这周我准备系统地了解哈const。周末交流哈 对于问题:为什么用strcpy()函数时, 用---------------- char a[3] = "abc"; strcopy(a,"end"); -------------------没有错。 用----------------- char *a = "abc";
回复

使用道具 举报

千问 | 2010-10-16 01:57:33 | 显示全部楼层
你好!如果是想把地址q所指字符串复制到地址p所指存储单元上的话:p=q;这样就行了;如果是想把地址p所指字符串复制到地址q所指存储单元上的话:q=p;这样就行了。如果是要交换p和q所指的字符串的话,再另定义一个地址变量就行了:char *a;a=p,p=q,q=a;就可以了。希望对你有些帮助。
回复

使用道具 举报

千问 | 2010-10-16 01:57:33 | 显示全部楼层
p q均为常量。不能自增。
回复

使用道具 举报

千问 | 2010-10-16 01:57:33 | 显示全部楼层
while(*q++ = *p++);找C/C++方面工作,这种问题必考。q指向常量,不能修改里面的值。
回复

使用道具 举报

千问 | 2010-10-16 01:57:33 | 显示全部楼层
发现你同一个问题发了两次,可能是我上次的解答不完善吧。现在再说两句,*p,*q是指指针p、q指向的内容。而你直接申明是定义好了,所以这是一个常量。常量是不可以赋值的。如果一定要用这样的语句,你要把指针指向的内容改为变量。于是可以用一下方式:#include void main(){char p[] = "I am
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行