h_8816002 发表于 2017-9-27 15:34

求助关于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()转换后数值也无误;
                }
请问这是怎么回事呢?我百思不得其解,谢谢!

feelhyq 发表于 2017-9-27 16:18

send(bf,bf,bf,bf); 不是应该是send(bf,bf,bf,bf);吗?bf应该没有了吧,这不是越界了吗?

h_8816002 发表于 2017-9-27 16:52

feelhyq 发表于 2017-9-27 16:18
send(bf,bf,bf,bf); 不是应该是send(bf,bf,bf,bf);吗?bf应该没有了吧,这 ...

没有越界,命令行调用了这个函数的进程,传入的是char*argv[],b是文件名,从b开始才是数据。一共四个argc参数

feelhyq 发表于 2017-9-27 17:15

h_8816002 发表于 2017-9-27 16:52
没有越界,命令行调用了这个函数的进程,传入的是char*argv[],b是文件名,从b开始才是数据。一共四 ...

那应该定义5个吧char bf;

h_8816002 发表于 2017-9-27 17:35

feelhyq 发表于 2017-9-27 17:15
那应该定义5个吧char bf;

那为啥该为string类型的入参就不会有少一个指针的问题了呢?

feelhyq 发表于 2017-9-27 17:49

h_8816002 发表于 2017-9-27 17:35
那为啥该为string类型的入参就不会有少一个指针的问题了呢?

你先改成char bf看看行不行,先出结果后讨论问题;

h_8816002 发表于 2017-9-27 18:05

feelhyq 发表于 2017-9-27 17:49
你先改成char bf看看行不行,先出结果后讨论问题;

对了,就是因为少一个指针,存放越界的问题,谢谢啊!
同样的情况下string就没问题,是不是string类对此类越界做过什么处理?呢

feelhyq 发表于 2017-9-27 18:09

h_8816002 发表于 2017-9-27 18:05
对了,就是因为少一个指针,存放越界的问题,谢谢啊!
同样的情况下string就没问题,是不是string类对此 ...

去百度以下就知道了,多看书,多写代码,多用指针

feelhyq 发表于 2017-9-27 18:12

本帖最后由 feelhyq 于 2017-9-27 18:36 编辑

feelhyq 发表于 2017-9-27 18:09
去百度以下就知道了,多看书,多写代码,多用指针

linqing171 发表于 2017-9-27 21:48

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;
或者 。。。 。。。

dongshan 发表于 2017-9-28 10:47

没看出一点C++的味道? 起码应用string代替char *嘛。

h_8816002 发表于 2017-9-28 13:39

dongshan 发表于 2017-9-28 10:47
没看出一点C++的味道? 起码应用string代替char *嘛。

我在这里手打伪代码,没带类名声明等,另外char*比string快好多,毕竟一个指针一个是类操作
页: [1]
查看完整版本: 求助关于C++ char*型传参的错误之原因