- 已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4天前关闭。
Improve this question
下面的代码在parameters函数中输出正确的字符串,但在main中输出不正确的字符串。
很明显出了点问题,但我看不出是什么。谢谢。
#include <iostream>
#include <string>
using namespace std;
typedef struct sim {
const char* dir;
} sim;
string convertToString(char* a)
{
string s(a);
return s;
}
int parameters(sim *sdata, char **argv, int argc){
char *filename;
string token;
string delimiter = "=";
size_t pos = 0;
string s;
for (int i = 0; i < argc; ++i){
s = convertToString(argv[i]);
while ((pos = s.find(delimiter)) != string::npos) {
token = s.substr(0, pos);
s.erase(0, pos + delimiter.length());
}
if(token == "-dir"){
sdata->dir = s.c_str();
cout << sdata->dir << endl;
}
}
}
int main(int argc, char** argv) {
sim * sdata = (sim*)malloc(sizeof(sim));
parameters(sdata, argv, argc);
cout << sdata->dir << endl;
free(sdata);
return 0;
}
我用./teststring-dir =/home/stephen启动了这个程序,得到了:
/首页/斯蒂芬
我原以为两个输出是一样的。
1条答案
按热度按时间ryoqjall1#
程序具有未定义的行为。
指针
sdata->dir
在退出函数parameters
后将无效,因为对象s
将不活动。它只有函数的块作用域。同样使用操作符
new
和delete
,而不是调用C函数malloc
。您可以在函数中编写如下内容
假设数据成员
dir
是在没有限定符const
的情况下声明的。在C++中,在结构声明中使用
typedef
说明符也是多余的。所以总的来说你需要写