- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想写入数据到一个字符缓冲区。因此,我有一个格式化我的数据的功能。例如,我只是像这样将一个 int 值传递给函数:
using namespace std;
#include <iostream>
char* writeData(int iData, char* sBufferData){
sprintf_s(sBufferData, 2048, "val:%i", iData);
return sBufferData;
}
int _tmain(int argc, _TCHAR* argv[])
{
char sBuffer[2048];
char sBufferData[2048];
sprintf_s(sBuffer, 2048, "%s, %s",
writeData(1, sBufferData),
writeData(2, sBufferData)
);
printf(sBuffer);
cin.get();
return 0;
}
但是输出结果是:val:1, val:1
我想要的是:val:1, val:2
谁能给我解释一下,为什么我的最终缓冲区中的值是 1 的两倍?
最佳答案
char sBuffer[2048];
char sBufferData[2048];
sprintf_s(sBuffer, 2048, "%s, %s",
writeData(1, sBufferData),
writeData(2, sBufferData)
);
您正在为 writeData
的两次调用重用 sBufferData
。在您转到 sprintf_s
之前,对该函数的一次调用会覆盖另一次调用的结果。
添加一个单独的缓冲区:
char sBuffer[2048];
char sBufferData1[2048];
char sBufferData2[2048];
sprintf_s(sBuffer, 2048, "%s, %s",
writeData(1, sBufferData1),
writeData(2, sBufferData2)
);
关于C++ 在 sprintf_s 中使用带有 sprintf_s 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246461/
我想写入数据到一个字符缓冲区。因此,我有一个格式化我的数据的功能。例如,我只是像这样将一个 int 值传递给函数: using namespace std; #include char* write
Visual Studio 提示我将 sprintf 替换为 sprintf_s,而不是 snprintf。 sprintf_s 不需要长度参数,它如何避免缓冲区溢出问题? 最佳答案 有两个版本。一种
我在使用 C/C++ 程序的 Windows 上的 Visual Studio 中收到“0xC0000005:访问冲突读取位置错误”,并尝试简化以说明我的问题。下面的代码运行得很好: char tmp
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有一个使用 sprintf_s 的 C 程序。它在 Windows 中工作正常,但是当我在 Linux 中编译代码时,出现以下错误: sprintf_s was not declared in th
我在 sprintf_s 中偶尔执行以下代码时发生崩溃。这段代码工作了很多年,没有任何问题。当我按照下面的语句在 strcat_s 和 sprintf_s 中给出大小时,不会出现崩溃。这可能是什么原因
我遇到了问题。示例: try { char strMes[6]; sprintf_s(strMes, sizeof(strMes), "%s", "012345678"); p
我在使用这个函数时遇到了一个有趣的问题。我使用它如下: int nSeq = 1; char cBuf[8]; int j = sprintf_s(cBuf, sizeof(cBuf), "%08d"
包含 banned.h(微软安全工具之一)后,编译器警告我 sprintf() 函数不安全,MSDN 中心给了我使用 的建议sprintf_s,因为我的项目是跨平台的,所以我写了一个sprintf函数
以下代码会导致错误并终止我的应用程序。这是有道理的,因为缓冲区只有 10 个字节长,而文本有 22 个字节长(缓冲区溢出)。 char buffer[10]; int length = spri
我有一个使用 sprintf_s 的 C 程序。它在 Windows 中运行良好,但是当我在 Linux 中编译我的代码时出现此错误: sprintf_s was not declared in th
对于新项目,我应该更喜欢哪个功能?来自 strsafe.h 或 sprintf_s 的 StringCchVPrintf 最佳答案 我建议使用 snprintf如果您使用 C 编写代码(因为 snpr
我正在尝试创建一个类,比如说 MyClass,在以下条件下工作: MyClass name = "everyone"; // Assigns "everyone" into a local str
这是我从 int 到 char* 的转换: char* str = malloc(sizeof("0000")); int int_ = 10; sprintf_s(str, sizeof("0000
我有一个 C++ 应用程序,其中客户报告了一个崩溃。但是崩溃不容易重现。在分析了一些日志之后,我发现崩溃可能发生在以下代码部分之间。请告诉我,如果我在其中包含这些代码语句,应用程序是否有可能崩溃?
在 C++ 中,使用 VS2012,我想获取 Mac 地址并将其转换为汽车格式。我使用 sprintf_s function() 以便在汽车模式下进行转换。在 Debug模式下,一切正常,但在 Rel
我正在使用来自 C# 的 C++ dll(不是我的)。我使用 Console.SetOut 和 Console.SetError 成功地将 C# 控制台输出重定向到一个文件。 有什么办法可以从“外部”
我正在尝试使用 WCHAR 中的 sprintf_s 创建一个新字符串。我的代码如下所示: #include #include void main(int argc, char ** argv)
这是工作的原始代码: // ... unsigned __int64 num = 57; sprintf_s(buffer, sizeof(buffer), "%llu", num); 但是,当我尝试
我写了一个跨平台代码,给出了当前日期 (mm/dd/yy) 和时间 (hh/mm/ss) 和完整日期 (yyyymmdd),此代码适用于 windows(MSVS2015) 但不适用于Linux(GC
我是一名优秀的程序员,十分优秀!