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

我的程序是这样的:
#include <stdio.h>
void main()
{
char *p = "I am a student.";
char *q = "You are a teacher.";
while(*q++ = *p++);
puts(p);
}

就是要把一个字符串复制到另一个中去。
while(*q++ = *p++)这句通不过,为什么?
最后一行写错了,是puts(q);

第1个回答  2010-10-08
你好!
如果是想把地址q所指字符串复制到地址p所指存储单元上的话:p=q;这样就行了;
如果是想把地址p所指字符串复制到地址q所指存储单元上的话:q=p;这样就行了。
如果是要交换p和q所指的字符串的话,再另定义一个地址变量就行了:
char *a;
a=p,p=q,q=a;
就可以了。
希望对你有些帮助。
第2个回答  2010-10-02
发现你同一个问题发了两次,可能是我上次的解答不完善吧。
现在再说两句,*p,*q是指指针p、q指向的内容。而你直接申明是定义好了,所以这是一个常量。常量是不可以赋值的。如果一定要用这样的语句,你要把指针指向的内容改为变量。
于是可以用一下方式:
#include <stdio.h>
void main()
{
char p[] = "I am a student.";
char q[] = "You are a teacher.";
char *p1=p,*q1=q;
puts(q1);
while(*q1++ = *p1++);
puts(q);
}
还要补充一点,我是用vc实验的,不过TC应该也是一样的,你可以去跑跑看。
第3个回答  2010-10-02
while(*q++ = *p++);
找C/C++方面工作,这种问题必考。

q指向常量,不能修改里面的值。
第4个回答  2010-10-03
p q均为常量。不能自增。来自:求助得到的回答
第4个回答  2010-10-03
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";
strcopy(a,"end");
------------------运行时就有错呢?

解释如下:

char *a = "abc";
abc"是一个字符串常量,有它自己的存储空间,因为分配在只读数据块,我们无法直接访问。
这样赋值后,a只能读,不能写
所以strcpy(a, "end")不行
只有当你为a分配非常量的存储空间后才行

注意哦
char *p = "dehie";
char ch[] = "dehie";
不一样。前者是将地址给p,后者是在ch数组的空间里填上dehie字符

发现了一个有趣的c语言问题,请各位大神帮忙解释一下。
1.之所以再次编译值不改变,乃是因为系统在加载可执行镜像时所选取的栈的初始地址是相对固定的,a就在这个栈上,而且程序开始到main函数执行,这是一段按部就班的例程,没有什么变数,所以a的地址不变是可以理解的。2.scanf("%d",20000)这句合法并没有什么难以理解的地方,因为指针归根到底也只是一...

C程序问题
counti就是外循环次数,countj就是内循环次数 第三题出的有问题 .是这样互换吗:for(i=1;j<=3;i++)for(j=1;i<=20;j++)如果是 就死循环了,因为第一次i=1 ,始终满足i<=20,内部循环一直进行 第四五两题,你可以运行试试啊,我看了一下,都没有变化,意识都一样 第六题我不想说了...

一道c语言编程题求大神解答,找一下我错在哪了,谢谢了?
错误1:宏定义最后没有分号,将#define D 500;改为#define D 500 错误2:l不是整数,因此将l定义为int型就错了 错误3:既然规定输入格式为P=,那么输入时就不能直接输入数值,而应在数值之前输入P=,例如输入P=6000 另外,程序的不妥之处:1、利润不一定是整数,因此将P定义为int型不妥 2、i...

关于C语言编写程序的一个疑问 高手帮忙看看我的程序哪错了
看了你的代码觉得,你在C语言的语法规则上还有待提高啊,在此举出你所给出的代码的若干错误。首先,你的代码不完整。第9、11、13行要定义三个100行的二维字符数组,如果仅仅是类似char adj[100][12]={"开心的"}的定义;这样adj[1]到adj[99]这99个词都会是空值(ASCII码为0),若用printf()函...

各位c语言程序高手,我这有套题需要你们来解答,谢谢啦~!
13,、如果在一个函数中的复合语句中定义了一个变量,则以下说法正确的是( C )A、在本函数范围内有效 B、在本程序范围内有效 C、只在复合语句中有效 D、不确定 14、假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( D )A、...

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
主要考察你c语言三目运算符的结合方向 是自右向左的 所以a<b?a:c<d?c:d 可以看成 a<b?a: (c<d?c:d) 1 < 4 ? a : (c < d ? c:d)括号内的表达式也可以看做是一个元素 因为 a = 1 b = 4 所以 条件 a < b 成立 所以选前者 a 答案就是 A) 1 ...

帮忙看一个C程序问题
symbol _workover是说你的程序里出现了没有对应模块的标识符,只要修改 一下就可以了*\/ \/*该程序作为考试题还可以,如果是实际项目开发使用,请使用有实际含义的符合一定标准(比如匈牙 利命名法)的命名方法,以便于维护和理解*\/ \/*上述是个人对C语言变量作用域的理解和粗略判断,仅供参考*\/ ...

c语言问题,不懂,请大家帮助,谢谢.
你写的也太简单了,根据经验猜测:p是一个指针,next可能表示的是p指向的下一个元素,有可能p代表的是一个链表的某个节点 如果以上猜测正确的话,p->next = h的意思是让p的下一个节点指针指向h,这样h就加入了链表 而p->next = h->next的意思是,让h的下一个节点成为p的下一个节点,如果...

我有个关于C程序编程的试题,求M的N次方怎么写?
pow(x,y)就是x 的y次方 如i=pow(2,10);就是i=2的10次方,头文件是#include<math.h>

初学C,想请高手讲解下这个程序每个步骤的具体意思,谢谢了
printf("repeated digit\\n\\n"); \/\/输出"repeated digit"和两个换行(“重复数字”的意思)else \/\/这里的else只有一种可能,就是n=0说明正常结束循环,n里面没有重复数字 printf("no repeated digit\\n\\n"); \/\/输出"no repeated digit"(无重复数字)和两个换行。return 0; \/\/程序正常结束 } ...

相似回答