当我strdup在Microsoft Visual C++中使用时,它警告我:
警告C4996:'strdup':不推荐使用此项目的POSIX名称.而是使用符合ISO C++的名称:_strdup.详细信息请参见在线帮助.
这似乎_strdup是正确的.
但是当我_strdup在GCC(Fedora Linux OS)中使用时,编译器显示错误:
错误:未在此范围内声明'_strdup'
使用GCC和Linux,编译器不会显示任何错误strdup.
哪个是正确的 - strdup或者_strdup?
注意:我包含<string.h>在我的代码中.
我试图摆脱一些编译器警告说strcpy,sprintf等是不安全的.我明白他们为什么不安全,但我想不出一个以C++风格修复代码的好方法.
这是代码的摘录:
extList->names[i]=(char *)malloc(length*sizeof(char));
strcpy(extList->names[i],extName); // unsafe
// strncpy(extList->names[i],extName,length); // also unsafe
Run Code Online (Sandbox Code Playgroud)
这是消息:
C4996:'strcpy':此函数或变量可能不安全.请考虑使用strcpy_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
在不知道要复制的东西的长度的情况下,我想不出用C++复制数据的安全方法.我知道有strlen(),但这也是不安全的,因为它假定(可能不正确)数据是以空值终止的.
也:
// used to concatenate:
sprintf(extStr,"%s%s",platExtStr,glExtStr);
Run Code Online (Sandbox Code Playgroud)
C4996:'sprintf':此函数或变量可能不安全.请考虑使用sprintf_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
使用std :: string来连接很容易,但是我需要以某种方式将数据输入extStr(而不是使用strcpy,lol).string :: c_str()函数返回一个指向不可修改数据的指针,所以我不能只设置extStr等于它.(我甚至不确定c_str()指针是否需要稍后调用它?是否使用"new"分配空间?)
关于这个东西的任何建议?这是10,000行文件的一部分,而不是我的......所以我并不热衷于用C++方式重写这个东西.
在Vista/7中,Windows资源管理器外壳窗口使用一种特殊的静态进度条来显示硬盘空间.
使用默认样式时,此栏为蓝色且未设置动画.当它接近满(低磁盘空间)时,它也会变成红色.
使用消息传递,我可以告诉Windows Forms ProgressBar控件将其状态更新为Paused和Error(分别为黄色和红色),这样可以正常工作,但这些仍然是特定于进度的.
在Windows用户体验指南中,它特别指出了进度条的这个"米"变体:
此模式不是进度条,但它是使用进度条控件实现的.仪表具有独特的外观,可以将它们与真正的进度条区分开来.
他们说它"是使用进度条控件实现的",所以......怎么样?我可以向控件发送什么消息让它以这种方式运行?
我已经看到你可以发送用于设置条形颜色的消息,但文档说在启用视觉样式时会忽略这些调用.原始ProgressBar控件的Windows API文档中没有任何其他内容似乎提示了一种方法.我只是坚持制作一个自定义绘制栏?我真的很想尽可能利用操作系统,以便应用程序在不同的操作系统版本中显得一致.我意识到Vista之前的版本可能不会支持这一点.
我正在寻找一个Windows窗体的解决方案,但我不知道,如果它甚至暴露在所有通过的Win32 API.
如果我向Resources.resx添加资源,它们是否嵌入在可执行文件中?
我已经读过资源存储在程序集中的某个地方,但项目中的所有文件(包括输出文件夹中的文件)都是程序集的一部分?
或者,汇编只是由编译器和资源生成的文件和模块不包含在程序集中?
有人可以澄清这是如何工作的吗?
注册窗口类时,必须填写WNDCLASS结构,其中包含一个hInstance字段:
typedef struct {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS
Run Code Online (Sandbox Code Playgroud)
然后,创建窗口,使用CreateWindow()它来获取这些参数:
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
);
Run Code Online (Sandbox Code Playgroud)
如果hInstance与提供WNDCLASS上课的时候登记的,为什么有必要提供一个hInstance到CreateWindow()?
被hInstance提供的WNDCLASS应该与hInstance提供的相同CreateWindow()吗?
如果WNDCLASS hInstance和 …
你好,我在 vb.net 应用程序中使用了一段时间的代码,但今天当我尝试它时,它返回了 403 错误。
Shared Function GetHtmlPage(ByVal http://mmo-stream.net/AiaSpecto/tester.php As String) As String
Dim strResult As String
Dim objResponse As WebResponse
Dim objRequest As WebRequest
objRequest = HttpWebRequest.Create(strURL)
objResponse = objRequest.GetResponse()
Using sr As New StreamReader(objResponse.GetResponseStream())
strResult = sr.ReadToEnd()
sr.Close()
End Using
Return strResult
End Function
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么我会收到 403 错误,因为当我进入链接本身时,我会收到 OK 消息。
ImageList应创建插入其中的所有图像的副本.因此,在将原件添加到列表后处置原件应该是安全的.
为什么以下测试用例失败?
Bitmap test = new Bitmap(128, 128);
ImageList il = new ImageList();
il.Images.Add(test);
Assert.AreEqual(1, il.Images.Count); // OK, image has been inserted
test.Dispose(); // now let's dispose the original
try
{
var retrievalTest = il.Images[0];
}
catch (ArgumentException) // ... but this Exception happens!
{
}
Assert.AreEqual(1, il.Images.Count); // and this will fail
Run Code Online (Sandbox Code Playgroud)
这里似乎发生了这样的事情:当尝试检索图像时,ImageList发现原始文件已被处理,并将其从ImageList中删除.
为什么会发生这种情况,我认为ImageList应该创建一个图像副本?