求助关于C++ char*型传参的错误之原因
大家好原函数:
send(char* a,char* b,char* c,char* d)
{
打印a-d,d值不正确,d的值和b是一样的;
}
int main(int argc,char*argv[])
{
char bf;
for(i=0;i<argc,i++)
{
bf=argv;
}
打印bf,值正确;
send(bf,bf,bf,bf);
}
这种情况下,bf的值进入send函数后出现了错误,并不是预定的值而是和bf一样。监测情况传参之前是正确的,传参后错误。命令行传入的字符串没有越界,最多就是“1010“。
调试后,如果改变send函数的入参类型,改为
send(string a,string b,string c,string d)
{
打印a-d,正确无误;
使用c_str()转换后数值也无误;
}
请问这是怎么回事呢?我百思不得其解,谢谢! send(bf,bf,bf,bf); 不是应该是send(bf,bf,bf,bf);吗?bf应该没有了吧,这不是越界了吗? feelhyq 发表于 2017-9-27 16:18
send(bf,bf,bf,bf); 不是应该是send(bf,bf,bf,bf);吗?bf应该没有了吧,这 ...
没有越界,命令行调用了这个函数的进程,传入的是char*argv[],b是文件名,从b开始才是数据。一共四个argc参数 h_8816002 发表于 2017-9-27 16:52
没有越界,命令行调用了这个函数的进程,传入的是char*argv[],b是文件名,从b开始才是数据。一共四 ...
那应该定义5个吧char bf; feelhyq 发表于 2017-9-27 17:15
那应该定义5个吧char bf;
那为啥该为string类型的入参就不会有少一个指针的问题了呢? h_8816002 发表于 2017-9-27 17:35
那为啥该为string类型的入参就不会有少一个指针的问题了呢?
你先改成char bf看看行不行,先出结果后讨论问题; feelhyq 发表于 2017-9-27 17:49
你先改成char bf看看行不行,先出结果后讨论问题;
对了,就是因为少一个指针,存放越界的问题,谢谢啊!
同样的情况下string就没问题,是不是string类对此类越界做过什么处理?呢 h_8816002 发表于 2017-9-27 18:05
对了,就是因为少一个指针,存放越界的问题,谢谢啊!
同样的情况下string就没问题,是不是string类对此 ...
去百度以下就知道了,多看书,多写代码,多用指针 本帖最后由 feelhyq 于 2017-9-27 18:36 编辑
feelhyq 发表于 2017-9-27 18:09
去百度以下就知道了,多看书,多写代码,多用指针
for(i=0;i<argc,i++)
{
bf=argv;
}
修改为
for(i=0;i<argc,i++)
{
for(j=0;j<len(argv);j++)
bf=argv;
}
或者内循环用strcpy
或者定义改一下 char *bf;
或者 。。。 。。。
没看出一点C++的味道? 起码应用string代替char *嘛。 dongshan 发表于 2017-9-28 10:47
没看出一点C++的味道? 起码应用string代替char *嘛。
我在这里手打伪代码,没带类名声明等,另外char*比string快好多,毕竟一个指针一个是类操作
页:
[1]