十分迷惑的问题,盼高手解答

yzssg 2006-12-30 03:28:33
我有这个函数int CTestStringDlg::GetNewString(char path[50])
{
strcat(path,"dddd"); //语句1
//path="dddd"; //语句2

return 0;
}
调用是这样的
char TestOld[50]="E:\\Test\\TestString\\Debug";
GetNewString(TestOld);

当我采用语句1时TestOld的值是在GetNewString中改变的值
当我采用语句1时TestOld的值是原来的值,没有被GetNewString修改



为什么呢?那位高手可以说说原因吗?环境VC6
...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈007哈 2006-12-31
  • 打赏
  • 举报
回复
up
akxu2006 2006-12-31
  • 打赏
  • 举报
回复
up
computer_zj 2006-12-30
  • 打赏
  • 举报
回复
这个是指针操作的问题。
void CTestStringDlg::OnButton1() 方法中的调用点GetNewString(TestOld);中TestOld是实参,且是指针类型。而被调用函数中 int CTestStringDlg::GetNewString(char path[50]) path 是形参。当调用发生时,TestOld和path 指向同一块内存,而strcat(path,"dddd");将改变path 指向的内存中的内容,同时你也看到TestOld中的内容改变了(因为,TestOld和path 指向同一块内存)。而path="dddd";是改变了path (指针变量)的内存指向,并不改变内存中的内容,所以path 变化了(指针变了),TestOld 中的内容不会变化。具体请参考c语言中指针章节。
yzssg 2006-12-30
  • 打赏
  • 举报
回复
谢谢各位的回答,有没有那位可以说出具体的原因呢
yzssg 2006-12-30
  • 打赏
  • 举报
回复
void CTestStringDlg::OnButton1()
{
CString chinese,english;

LOAD_A_STRING(IDS_STRING102,chinese,2);
LOAD_A_STRING(IDS_STRING103,english,7);
m_Edit1=chinese;
m_Edit2=english;

char TestOld[50]="E:\\Test\\TestString\\Debug";

//GetNewString("COFO",TestOld);
GetNewString(TestOld);
m_Edit2=TestOld;

UpdateData(FALSE);
}

int CTestStringDlg::GetNewString(char path[50])
{
//strcat(path,"dddd");
path="dddd";
return 0;
}
这样是不会出错的
zhyaaa123 2006-12-30
  • 打赏
  • 举报
回复
语句1是直接修改传进来的指针指向地址的值;
语句2是只是修改了栈里的值。

个人理解
王国凡 2006-12-30
  • 打赏
  • 举报
回复
不能直接用 = 号把常量字符串赋给字符串数组的, 可以用 strcpy 之类的字符串函数.
比如:
char TestOld[50]="E:\\Test\\TestString\\Debug";
TestOld = "ddd"; // 这就有错 .
strcpy(TestOld, "ddd"); // 这就 ok
yzssg 2006-12-30
  • 打赏
  • 举报
回复
我的表述真的不清楚吗?我是说我采用上面两个语句会出来不同的效果,你可以自己试验一下,看看注释调1与注释掉2后显示的效果
xdlous 2006-12-30
  • 打赏
  • 举报
回复
当我采用 # 语句1 # 时TestOld的值是在GetNewString中改变的值
当我采用 # 语句1 # 时TestOld的值是原来的值,没有被GetNewString修改
----------------------------------------------------------------
这是什么?
yzssg 2006-12-30
  • 打赏
  • 举报
回复
不是的,我是改变后测试的。我这边显示的把语句2注释掉的
后面的测试我把语句1注释掉了
xdlous 2006-12-30
  • 打赏
  • 举报
回复
你都是采用语句1还能产生2种不同的结果!!!
佩服

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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