小编Ben*_*igt的帖子

输出void函数到txt

我只是在我的第二季c ++所以请保持答案简单....

我有一个非常混乱的程序,链接列表,类和文件i/o我已经完成了程序,但我不能把它输出到.txt它可能是我糟糕的编码布局,因为输出时我的想法我写了这个.有问题的功能是:

tag.display_balance(); 
Run Code Online (Sandbox Code Playgroud)

请注意,此函数位于链接列表(标记)内,该列表进入类并调用函数(display_balance)以打印输出.

一切都出来到控制台就好了.但我不知道怎么把它保存到.txt上几个谷歌和论坛搜索没有显示任何我能理解的内容.我试过了:

ofstream BilloutPut;
BilloutPut.open("BillingStatements.txt");
BilloutPut<< tag.display_balance(); 
Run Code Online (Sandbox Code Playgroud)

这是我学习如何输出到文件的唯一方法,但由于它是一个无效函数,它没有用.我想尽可能避免重载<<函数.

- 谢谢你

c++ iostream

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

在文本文件上调用ReadFile,得到了奇怪的(日文?)字符

我使用下一个代码从一个文件中读取所有元素,其中包含有效的句柄hFile,以及我使用它的大小GetFileSize(hFile, NULL).

_TCHAR* text = (_TCHAR*)malloc(sizeOfFile * sizeof(_TCHAR));
DWORD numRead = 0;
BOOL didntFail = ReadFile(hFile, text, sizeOfFile, &numRead, NULL);
Run Code Online (Sandbox Code Playgroud)

操作之后text是日语中的一些奇怪的东西,而不是文件的内容.

我做错了什么?

编辑:我理解这是编码问题,但是如何将文本转换为LPCWSTR以使用WriteConsoleOutputCharacter之类的东西

c c++ io

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

函数内部的函数

function1()
    {
        statement1;
        statement2;
        function2()
        {
                statement3;
                statement3;
        }
    } 
Run Code Online (Sandbox Code Playgroud)

为什么控制不进入function2,即使两个函数的返回类型相同

c gcc nested-function

3
推荐指数
2
解决办法
254
查看次数

Visual C++ 2010代码完成

我已经使用了c#一段时间了,我注意到它有代码预测你的代码和"解析" using的功能.我现在正在使用visual c ++,我注意到它没有代码预测,并且它没有任何"解决"任何缺失include.

这是您必须在visual c ++中启用的设置吗?或者您是否必须了解所包含功能所需的内容?

我只是好奇我已经学会了C和IDE的C没有代码预测.我现在正在学习c ++,我很想知道visual c ++是否有代码预测或智能包含分辨率.

谢谢Stack,我最喜欢的网站!

c++ intellisense visual-studio-2010 visual-studio

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

从当前Windows位置C++的文件I/O.

我还没有找到关于此的明确答案.我试图从我的.EXE访问子文件夹中的文件.当我之前问过,人们告诉我使用绝对位置即"c:/ game/info /"如果我想访问/ info /中的内容

但是,对于我或任何人来说,假设有人要从同一目录中使用他们的程序是完全不合理的.如果用户只有D盘怎么办?诸如此类的事情.

所以我的问题是:如何在不依赖整个路径的情况下从我的可执行文件访问子目录中的文件?

c++ file-io winapi path

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

使C代码运行得更快

我写了一段代码,用于计算0到255之间的数字频率.

unsigned char arr[4096]; //aligned 64 bytes, filled with random characters

short counter[256]; //aligned 32 bytes

register int i;

for(i = 0; i < 4096; i++)
    ++counter[arr[i]];
Run Code Online (Sandbox Code Playgroud)

执行需要花费大量时间; 随机访问计数器阵列非常昂贵.

有没有人有任何想法,我可以使用顺序访问或我可以使用的任何其他方法?

c optimization performance

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

将std :: wstring的内容从C++返回到C#

我有一个非托管的C++ DLL,我用一个简单的C接口包装,所以我可以从C#上调用PInvoke.这是C包装器中的示例方法:

const wchar_t* getMyString()
{
    // Assume that someWideString is a std::wstring that will remain
    // in memory for the life of the incoming calls.
    return someWideString.c_str();
}
Run Code Online (Sandbox Code Playgroud)

这是我的C#DLLImport设置.

[DllImport( "my.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl )]
private static extern string GetMyString();
Run Code Online (Sandbox Code Playgroud)

然而,字符串没有被正确编组,通常搞砸了第一个字符,或者有时会显示出一堆中文字符.我已经记录了C端实现的输出,以确认std :: wstring是否正确形成.

我还尝试更改DLLImport以返回IntPtr并使用Marshal.PtrToStringUni使用包装方法进行转换,它具有相同的结果.

[DllImport( "my.dll", CallingConvention = CallingConvention.Cdecl )]
private static extern IntPtr GetMyString();
public string GetMyStringMarshal()
{
    return Marshal.PtrToStringUni( GetMyString() );
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

用答案更新

因此,如下所述,这不是我的绑定的问题,而是我的wchar_t*的生命周期.我的书面假设是错误的,someWideString实际上是在我调用应用程序的其余部分时被复制的.因此它只存在于堆栈中,并且在我的C#代码完成编组之前就被释放了.

正确的解决方案是将指针传递给我的方法,如shf301所述,或者确保在我的C#接口有时间复制之前,我的wchar_t*引用不会被移动/重新分配/销毁.

将std :: wstring作为"const&std :: wstring"返回到我的C层意味着我对c_str()的调用将返回一个不会在我的C方法范围之外立即释放的引用.

然后调用C#代码需要使用Marshal.PtrToStringUni()将数据从引用复制到托管字符串.

c# c++ unicode interop

3
推荐指数
2
解决办法
6699
查看次数

运行程序"try.m"时出现MATLAB错误

在编辑器中创建MATLAB(版本2010a)文件后,我收到以下提到的错误:

"MATLAB无法运行此文件,因为\ toolbox\matlab\lang\try.m会在MATLAB路径中隐藏它"

还有这个,我得到一个选项"更改文件夹","添加路径".即使在点击并使用此选项后,我仍然会收到相同的消息.

我查阅了matlab手册并试图改变路径.另外我检查了我的路径变量,我存储我的matlab文件的地方已经存在于路径变量中.请帮助纠正错误.我的文件名是try.m'try.m'中的代码只是:

 clear all;
Run Code Online (Sandbox Code Playgroud)

matlab

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

MSIL中Cpblk操作码的完整语义

在MSDN文档cpblk是一个有点稀疏:

cpblk指令将一个数(类型unsigned int32从源地址字节)(类型*,native int&)到目的地地址(类型*,native int&).cpblk如果源和目标区域重叠,则未指定行为.

cpblk假设所寻址的源和目标都与机器的自然尺寸对齐.该cpblk指令可以紧接在unaligned.指令之前,以指示源或目标是未对​​齐的.

好吧,相比其他大容量复制操作,如Array.Copy,Marshal.CopyBuffer.BlockCopy,我们知道:

  • 大小以字节为单位
  • 指针应该对齐

这给我留下了一些问题:

  • 缓冲区应该先固定吗?操作数类型是native int"非托管指针"还是"托管指针(&)"是否重要?
  • 这种类型有限制吗?(例如,Buffer.BlockCopy仅适用于基本类型,而不是结构,即使它们只包含基本类型)

根据/sf/answers/1846607381/钉扎是不必要的,但支持说明是错误的.(我怀疑大型对象堆没有被压缩这是一个过度概括)

ECMA-335也不是很有帮助.那里的指令描述包含相同的措辞并添加

[基本原理: cpblk用于复制结构(而不​​是任意字节运行).由CLI分配的所有这些结构自然地与当前平台对齐.因此,生成cpblk指令的编译器不需要知道代码最终是在32位还是64位平台上执行.最终理由 ]

好吧,这听起来应该接受更多的类型Buffer.BlockCopy.但仍然不是任意类型.

也许新发布的.NET核心源代码会有一些答案.

.net clr

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

在拿着自旋锁时自动不安全返回?

受人尊敬的书籍Linux Driver Development

flags传递给的参数spin_unlock_irqrestore必须是传递给的相同变量spin_lock_irqsave.你还必须打电话spin_lock_irqsavespin_unlock_irqrestore使用相同的功能; 否则你的代码可能会破坏某些架构.

然而,我找不到与内核代码本身捆绑在一起的官方文档所要求的任何此类限制.我发现违反此指南的驱动程序代码.

显然,调用spin_lock_irqsavespin_unlock_irqrestore从单独的函数调用并不是一个好主意,因为你应该在保持锁定的同时最小化完成的工作(禁用中断,不能少!).但是如果对内核进行了更改,那么如果小心翼翼地完成它,它是否真的不会违反API合同,或者它是否仍然禁止这样做?

如果在某些时候删除了限制,它是否适用于版本3.10.17?

linux-device-driver linux-kernel interrupt-handling spinlock

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