注册 登录
编程论坛 C++教室

[求助]一个字符串给指针的问题

wangweicoin 发布于 2007-09-16 21:01, 848 次点击
#include<iostream.h>
#include<string.h>
void main()
{
char *p="abcdefgh";
p+=3;
cout<<strlen(strcpy(p,"ABCD"));
}
大家看这段程序有问题吗?这是一本练习书上的一道题,问运行结果,可是我不会,没遇到过把字符串直接给指针的,我试着运行这段程序,编译没错但是运行就出现问题了,能不能解释一下?大家帮帮忙吧!
(书上的答案是输出4)
14 回复
#2
雨中飞燕2007-09-16 21:08
这本垃圾书应该扔了~~~~~~~~~~~~



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
#3
wangweicoin2007-09-16 21:14
是吗?是不是strcpy(p,"ABCD");有问题?我就没见过这个用法,呵呵.
#4
HensJimmer2007-09-16 21:16
extern char *strcpy(char *dest,char *src);
把src所指由NULL结束的字符串复制到dest所指的数组中

这是我看到的一段说明,希望对楼主有帮助
#5
wangweicoin2007-09-16 21:21
HensJimmer:
对不起,我是初学者,不太懂,你能解释清楚点吗?
#6
雨中飞燕2007-09-16 21:23
以下是引用wangweicoin在2007-9-16 21:14:50的发言:
是吗?是不是strcpy(p,"ABCD");有问题?我就没见过这个用法,呵呵.

不是这的问题
是你的p的问题,并且写这种代码人不少,连有的破书都有,
严格来说还是错的



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/

#7
雨中飞燕2007-09-16 21:26
const char* to char*
这种赋值至少严格编译器会给出警告甚至错误



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
#8
wangweicoin2007-09-16 21:35
是char *p="abcdefgh";的错误吧?不能把const char*  to  char*
#9
aipb20072007-09-16 21:46
你学的是c++的话最好不要用字符串指针,用string

那几个函数str..函数是很危险的。
#10
xiaoMa_YZ2007-09-17 15:02

1. p指向一个常量的首地址
2. strcpy 往一个常量的内存里写东西。

#11
jonc2007-11-02 17:31

真是该扔掉了
p+=3 是错误的
指针中
int *p;
定义后
p的初始值是不能改变的
他是所指向的初始地址

#12
leeco2007-11-02 23:56
以下是引用jonc在2007-11-2 17:31:37的发言:

真是该扔掉了
p+=3 是错误的
指针中
int *p;
定义后
p的初始值是不能改变的
他是所指向的初始地址

请不要误人

#13
六道2007-11-03 00:21
回复:(jonc)真是该扔掉了p+=3 是错误的 指针中int ...
p为字符串起始地址,也就是存放的一个字符的地址&amp;*p[a],p+=3是可以的,之后p变为&amp;*p[d].
#14
jonc2007-11-03 10:18
受教了
我看的教材都是那么说的
不好意思啊
#15
jonc2007-11-03 10:25
我重新翻了下资料
是我记错了
说的是数组指针
初始化后
数组名本来就是个常量指针了
始终指向数组的开头
比如int b[6]={1};
则b+=3就是无效的
1