小编Pie*_*ers的帖子

sprintf()的输入和输出字符串可以相同吗?

我在过去的代码中多次使用过这种类型的约定:

strcpy ( cTmpA, "hello" );
sprintf ( cTmpA, "%s world", cTmpA );
Run Code Online (Sandbox Code Playgroud)

最近我将我的遗留C编译器切换到Visual Studio 2005,发现我得到了一个由上面的代码产生的乱码.然后我想到,sprintf()的行为可能没有严格定义,其中一个输入与输出字符串匹配.

以上代码是否有效K&R C?如果没有,我如何找到我的代码中发生此类调用sprintf()的所有位置?

c printf

20
推荐指数
2
解决办法
8841
查看次数

调试Visual Studio中调用堆栈为null的minidump

我有一个客户正在获得100%可重现的崩溃,我无法在我在Visual Studio 2005中编译的程序中复制.我向他们发送了我的程序的调试版本,并保留了所有PDB和DLL文件.他们发给我minidump文件,但当我打开它时,我得到:

"MiniDump.dmp中0x00000000处的未处理异常:0xC0000005:访问冲突读取位置0x00000000."

然后调用堆栈只显示"0x00000000()",反汇编显示内存转储为0x0.我已经设置了符号服务器,加载了我的PDB符号等.但是我看不出有什么方法可以知道哪些DLL实际上导致跳转为null.这是一个包含许多依赖项的大型项目,其中一些是我没有源代码或PDB的二进制文件,因为我使用API​​作为第三方.

那么这个minidump究竟有用吗?如何查看导致崩溃的DLL?我以前从来没有真正使用minidump进行调试,但我读过的所有教程似乎至少都显示了一个函数名或其他能给你一个调用堆栈线索的东西.我只得到一行指向null.

我也尝试使用"Depends"来查看是否存在一些未解析的DLL依赖项; 但是在我使用各种Windows操作系统的三台测试机器上,我似乎得到了三套不同的OS DLL依赖项(但却无法复制崩溃); 因此,对于诊断问题,这似乎不是一种特别可靠的方法.

有哪些其他方法可用于确定此问题的原因?有没有办法退回一条指令,看看哪个DLL跳转到null?

debugging minidump visual-studio-2005 visual-c++

7
推荐指数
2
解决办法
4970
查看次数

CSV文件读/写的严格定义

我在C中编写了自己的CSV读取器/写入器,以将记录存储在ODBC数据库的字符列中.不幸的是,我发现很多边缘情况都超过了我的实现,我得出结论我的问题是我没有严格定义CSV的规则.我读过RFC4180,但似乎不完整,并没有解决歧义.

例如,应该将""视为空令牌还是双引号?报价是从外到内还是从左到右匹配?如何使用具有无法匹配的单引号的输入字符串?当我有嵌套的标记时,真正的混乱就开始了,它使转义的引用字符加倍.

我真正需要的是一个明确的CSV标准,我可以在代码中实现.每当我觉得我已经钉好每一个角落的情况下,我找到了另一个.我确信这个问题已经被我的优秀思想多次仔细考虑并解决了,有没有人写过我可以在代码中实现的严格的CSV定义?我意识到C不是这里理想的语言,但我现阶段没有关于编译器的选择; 我也不能使用第三方库(除非它与C-90编译).Boost不是一个选项,因为我的编译器不支持C++.我已经考虑过丢弃用于XML的CSV,但是在256字符数据库记录中存储一些令牌似乎有些过分.有人制定了明确的CSV规范吗?

c csv

6
推荐指数
1
解决办法
327
查看次数

VS2015中sprintf()和wsprintf()的格式差异

我正在将一些代码从多字节移动到 unicode,并发现我的字符串格式出现错误。看起来 Visual Studio 2015 在 sprintf() 和 wsprintf() 之间处理宽度参数说明符“*”的方式不同。这是编译器错误或副作用,还是我错过了一些非常明显的东西?

下面的代码,带有输出:

char    cOutA [ 64 ];
wchar_t wcOutA [ 64 ];

sprintf ( cOutA, "Multibyte = %.*f\n", 3, 2.12345 );
wsprintf ( wcOutA, L"Unicode = %.*f\n", 3, 2.12345 );

printf ( cOutA );
wprintf ( wcOutA );
Run Code Online (Sandbox Code Playgroud)

输出:

Multibyte = 2.123
Unicode = *f
Run Code Online (Sandbox Code Playgroud)

我期望两者都能给我一个精确到小数点后三位的浮点数。我究竟做错了什么?

visual-c++ visual-studio-2015

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