小编9Br*_*ker的帖子

std :: endl << std :: flush有目的吗?

std::flush就在std::endl我正在查看遗留代码的所有内容之后.当我第一次看到这个,我的想法是这是在看的描述冗余std::endlstd::flush在:

http://en.cppreference.com/w/cpp/io/manip/endl

http://en.cppreference.com/w/cpp/io/manip/flush

以下是我在遗留源代码中看到的示例:

std::cout << "Generic Notification" << std::endl << std::flush;
Run Code Online (Sandbox Code Playgroud)

但是,由于许多高级软件开发人员多年来都看过这个代码,我想知道是否有一些我遗漏的细节.有没有任何目的有一个std::flushstd::endl

c++ flush endl

9
推荐指数
3
解决办法
808
查看次数

GHS .gpj项目到Eclipse CDT

我已经搜索了一段时间,但没有找到一个好的答案。(我目前正在与GHS支持人员讨论此事,但想在这里发布以查看是否有人对此有任何经验。在与GHS进行更多交谈之后,我将发布更新。)

我正在使用Green Hills Software MULTI IDE和编译器开发嵌入式应用程序。这是一个C ++项目。我试图移植现有的.gpj项目以在Eclipse中使用,以便可以利用Eclipse CDT中的开发工具。有没有人有这样做的经验并且可以提供提示?

我当然想在Eclipse中进行开发,并且仍然使用GHS编译器以及当前.gpj文件中的所有选项进行编译。目前,我只打开了两个应用程序,并在一个单独的Eclipse项目中开发了源代码,然后使用当前的.gpj项目在MULTI项目管理器中进行编译。

这里对此进行了简要讨论,但未提供解决方案:https : //www.eclipse.org/forums/index.php/t/210115/

编辑:我愿意接受在MULTI Project Manager中使用现代编辑器的任何建议(不必是Eclipse CDT)。所需的主要开发工具是自动完成现有变量并转到类和变量的定义。

c++ eclipse-cdt

5
推荐指数
1
解决办法
1033
查看次数

Static Cast访问静态const类成员

所以昨天我一直在寻找SO而无法找到以下答案.这种情况来自我正在使用的一些代码,但这是MCVE来演示它.

我在A中定义了一个A类,其中只有一个静态const.我已经在标题中初始化了它.

#ifndef A_H_
#define A_H_
class A {
public:
    static const int test = 5;
    ~A(){};
};


#endif /* A_H_ */
Run Code Online (Sandbox Code Playgroud)

然后我有一个类B需要从类A访问公共静态const.在这个例子中,它会将值深度复制到向量.

#ifndef B_H_
#define B_H_

#include "A.h"
#include <vector>
#include <iostream>

class B {
private:
    std::vector<int> testVec;

public:
    B(){

        testVec.push_back((const int)A::test);
        //testVec.push_back(static_cast<const int>(A::test)); //Also works
        //testVec.push_back(A::test); //Doesn't work without forward declaration of const int A::test in main or in this header 
        //(Compiler link error: undefined reference to `A::test')  
        std::cout<< testVec.front() << std::endl;
    }

    ~B(){};
};

#endif /* B_H_ …
Run Code Online (Sandbox Code Playgroud)

c++ casting

4
推荐指数
1
解决办法
213
查看次数

strcpy 的安全使用

在我们公司的编码标准中禁止使用普通的旧 strcpy,因为它可能会导致缓冲区溢出。我正在寻找我们在代码中链接的某些 3rd Party Library 的来源。库源代码使用 strcpy 是这样的:

for (int i = 0; i < newArgc; i++)
{   
     newArgv[i] = new char[strlen(argv[i]) + 1];
     strcpy(newArgv[i], argv[i]);       
}
Run Code Online (Sandbox Code Playgroud)

由于在为要复制到的缓冲区分配内存时使用了 strlen,因此看起来不错。有没有可能有人可以利用这个正常的 strcpy ,或者这是否像我认为的那样安全?

我已经看到了导致缓冲区溢出情况的 strcpy 的幼稚使用,但这似乎没有,因为它总是使用 strlen 为缓冲区分配适量的空间,然后使用 argv[] 作为复制到该缓冲区源应始终为空终止。

老实说,我很好奇使用调试器运行此代码的人是否可以利用此功能,或者是否有任何其他策略试图破解我们的二进制文件(使用我们在其编译版本中链接的这个库源)可以用来利用此用途的strcpy。感谢您的投入和专业知识。

c++ exploit strcpy

3
推荐指数
1
解决办法
3032
查看次数

标签 统计

c++ ×4

casting ×1

eclipse-cdt ×1

endl ×1

exploit ×1

flush ×1

strcpy ×1