C++结构向量,垃圾字符串值

Posted

技术标签:

【中文标题】C++结构向量,垃圾字符串值【英文标题】:C++ Struct vector, Junk string value 【发布时间】:2016-04-11 12:10:15 【问题描述】:

现在我正在研究结构向量,并尝试在按 ppid 排序后打印它。在这个过程中,我想测试“'字符串值'保存得很好”,但是一些垃圾值被保存在这个空间中,如下图。

:: 第二个值“contest.exe”保存好,

::但是,如您所见,第一个值 "Microsoft.VsHub~" 保存为 "?(triangle)"

为什么会出现这个问题,如何解决?

这是我的结构,

struct process 
    string procName;
    DWORD procPid;
    DWORD procPpid;
;

main()
    ...
    std::vector <process*> myProcess;
    ...

保存价值,

    process* p = new process();
    p->procName = pe32.szExeFile;
    p->procPid = pe32.th32ProcessID;
    p->procPpid = pe32.th32ParentProcessID;

    myProcess.push_back(p);

然后打印出来

    _tprintf(TEXT("[%s]"), pe32.szExeFile);
    _tprintf(TEXT(" %s \n"), myProcess[i]);
    _tprintf(TEXT("[%d]"), myProcess[i]->procPid);

【问题讨论】:

一般来说,避免在 STL 容器中使用裸指针,而是使用智能指针。 stringstd::string 吗? 一般来说,尽可能避免使用指针。而是按值 (std::vector&lt;process&gt;) 存储元素。 @Pixelchemist - 指针是语言的核心,在向量中有 referring-only 指针是没有问题的。当向量拥有指针的所有权时,问题往往会堆积起来。然后尽可能使用整个对象/值,否则使用智能指针,其类型应由共享需求确定。 @JohannGerell:非所有权是指不适合按值存储但问题的一部分代码表明按值存储可能是这里的最佳选择。不仅因为值向量更通用(元素可复制、可移动……),还因为性能考虑(相邻存储、缓存效果……)我的建议成立。所有权:value &gt; smart pointer &gt; pointer. 【参考方案1】:

通过做

_tprintf(TEXT(" %s \n"), myProcess[i]);

您尝试在索引i 处的myProcess 向量中打印process* 的内容作为空终止字符串。请改用myProcess[i]-&gt;procName.c_str()

【讨论】:

时间限制即将结束:)

以上是关于C++结构向量,垃圾字符串值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将 uint8_t 的向量转换为 std::string?

字符串向量,每个字符串的长度和 c++ 中的 strlen

C++ 函数返回一个向量/字符串,但不是一个数组

在 C++ 中的向量中键入所有值后出现分段错误(核心转储)

C++ 将大量向量转换为字符向量的最有效方法

C++ 向量和分段错误