C++初学者提问 奇怪的问题

bingo_ 2010-01-03 10:56:51

void M1()
{
char* w1 = "URLDownl";
w1 = strcat(w1,"oadTo");
w1 = strcat(w1,"File");
w1 = strcat(w1,"A");
}

void M2()
{
char* w1 = "URL";
w1 = strcat(w1,"DownloadTo");
w1 = strcat(w1,"File");
w1 = strcat(w1,"A");
}

void M3()
{
char* w1 = "URL";
w1 = strcat(w1,"Download");
w1 = strcat(w1,"ToFile");
w1 = strcat(w1,"A");
}


M1 M2 M3里w1的值 为什么不同?
...全文
259 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2010-01-04
  • 打赏
  • 举报
回复
指针没分配空间
zjsiva 2010-01-04
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
void M1()
{
char w[20] = "URLDownl";

char *w1=w;
w1 = strcat(w1,"oadTo");
w1 = strcat(w1,"File");
w1 = strcat(w1,"A");
cout<<w<<endl;
}

void M2()
{
char w[20] = "URL";
char *w1=w;
w1 = strcat(w1,"DownloadTo");
w1 = strcat(w1,"File");
w1 = strcat(w1,"A");
cout<<w<<endl;
}

void M3()
{
char w[20] = "URL";
char *w1=w;
w1 = strcat(w1,"Download");
w1 = strcat(w1,"ToFile");
w1 = strcat(w1,"A");
cout<<w<<endl;
}
int main(){
M1();
M2();
M3();
system("pause");
return 0;
}

输出:
URLDownloadToFileA
URLDownloadToFileA
URLDownloadToFileA

不知道是不是这个意思?
goodwcy 2010-01-04
  • 打赏
  • 举报
回复
不知国家二级C++难度怎么样?
cattycat 2010-01-04
  • 打赏
  • 举报
回复
你得先定义一个数组,你的w1是常量字符串。
lklwlklw 2010-01-04
  • 打赏
  • 举报
回复
没有分配任何空间
wangxipu 2010-01-04
  • 打赏
  • 举报
回复
疯狂的行为
最后的结果未定义(undefined)
cht19790826 2010-01-04
  • 打赏
  • 举报
回复
我也学习了,我的体会是:知道w1指向常量区,是不能改变的,必须给它分配内存空间,才能执行
函数strcat();
我也象知道如若5楼所说,那么w1为什么能够正确输出呢?
commander118 2010-01-04
  • 打赏
  • 举报
回复
w1所指空间不足以容纳新字符,结果未定义
pw_Start 2010-01-04
  • 打赏
  • 举报
回复
原型:extern char *strcat(char *dest,char *src);

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

LZ只是将char*的变量指向了一个常量区存放的常量字符串,没有给它分配空间,执行的结果依据程序运行当时常量区的存储情况有可能不同
最好是自己给char*的变量申请足够的空间,再用strcat这个函数,这样就不会出现不一样了
bingo_ 2010-01-03
  • 打赏
  • 举报
回复
执行不成功? 那为何 有下面这种情况呢



char* w1 = "URL";
w1 = strcat(w1,"Download");
w1 = strcat(w1,"ToFile");
w1 = strcat(w1,"A");
::MessageBox(NULL,w1,NULL,NULL);
// 结果 URLDownloadToFileA

char* w2 = "URL";
w2 = strcat(w2,"DownloadTo");
w2 = strcat(w2,"File");
w2 = strcat(w2,"A");
::MessageBox(NULL,w2,NULL,NULL);
// 结果 URLDownloadToFileAoownloadToFileAoFileAoooownloadToFileAoFileAooo
Ymeng_0226 2010-01-03
  • 打赏
  • 举报
回复
重新声明一个数组,指针是不能用来放数据的,只能放地址。所以如一楼所说。
昵称很不好取 2010-01-03
  • 打赏
  • 举报
回复
你的strcat函数不会执行成功,因为w1只是一个指针,没有分配任何空间

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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