Tag: visual studio 2010

为什么printf格式的unicode参数没有?

使用printf将双字节字符串格式化为单字节字符串时: printf(“%ls\n”, L”s:\\яшертыHello”); // %ls for a wide string (%s varies meaning depending on the project’s unicode settings). 显然,有些字符不能表示为ascii字符,所以有时我看到双字节字符变成’?’的行为。 标记字符。 但是,这似乎取决于特定的角色。 对于上面的printf,输出是: s:\ 我希望我可以得到类似的东西: s:\??????Hello 我担心我已经丢失了这个例子,但是当我遇到unicode字符时,我觉得有一个字符串,用’?’替换第一个字符串 然后放弃了其余的。 所以,我的问题是,当您将宽字符串格式化为单字节字符串时应该会发生什么。 这里的文档: http : //msdn.microsoft.com/en-us/library/hf4y5e3w.aspx说“字符显示到第一个空字符”。 但是,我没有看到。 这是printf中的一个错误,还是我在某处看到的行为,如果有的话,在哪里。 谢谢你的帮助。 UPDATE 感谢人们给我替代使用printf的答案。 我将改为另一种选择,但出于好奇,我真的很感兴趣为什么printf没有可靠的记录行为。 看起来好像它的实现者不顾一切地使它不起作用。

错误C2143:语法错误:缺少’;’ 在’类型’之前

我是编程C的新手..请告诉我这个程序有什么问题,以及为什么我收到此错误: 错误C2143:语法错误:缺少’;’ 在’类型’之前 …. extern void func(); int main(int argc, char ** argv){ func(); int i=1; for(;i<=5; i++) { register int number = 7; printf("number is %d\n", number++); } getch(); }

从不同的VS2010项目中的C ++代码调用C函数时出现链接器错误

我正在尝试包含我在C ++项目中找到的一些C代码。 该函数在C文件中定义如下。 #ifdef __cplusplus extern “C” { #endif extern char *dtoa(double, int, int, int *, int *, char **); extern char *g_fmt(char *, double); extern void freedtoa(char*); #ifdef __cplusplus } #endif char * g_fmt(register char *b, double x) { 我在其中包含的VS项目正在创建一个dll。 该文件正在编译为C,项目中的其他文件正在编译为C ++。 我添加了一个标题以包含在我的C ++文件中 #ifndef G_FMT_H #define G_FMT_H #ifdef __cplusplus extern “C” { #endif […]

C4996(函数unsafe)警告strcpy但不是memcpy

我在VS2010中编写代码,我碰巧在编译后看到编译器为strcpy和sprintf调用提供了C4996警告(“此函数或变量可能不安全”)。 但是,我无法获得memcpy的类似警告(并且可能在代码中有更多类似的’不安全’函数调用) int _tmain(int argc, _TCHAR* argv[]) { char buf1[100], buf2[100]; strcpy (buf1, buf2); // Warning C4996 displayed here asking to use strcpy_s instead memcpy (buf1, buf2, 100); // No warning here asking to use memcpy_s memcpy_s(buf1, 100, buf2, 100); return 0; } 为什么会这样? 如何在代码中为所有可能的不安全呼叫打开C4996警告?

使用scanf – > ANSI C的最大字符串长度

我有: #define MAX_STR_LEN 100 我想放入scanf模式,所以我可以控制字符串长度: scanf(“%100[^\n]s”,sometext) 我试过了: scanf(“%MAX_STR_LEN[^\n]s”,sometext) scanf(“%”MAX_STR_LEN”[^\n]s”,sometext) scanf(“%”,MAX_STR_LEN,”[^\n]s”,sometext) 它没有用。 我只想避免缓冲区溢出,因为“sometext”分配了malloc(MAX_STR_LEN) … 有任何想法吗?

x86和x64之间的浮点算术的差异

我偶然发现了在x86和x64的MS VS 2010版本之间完成浮点算术的方式不同(两者都在同一台64位机器上执行)。 这是一个简化的代码示例: float a = 50.0f; float b = 65.0f; float c = 1.3f; float d = a*c; bool bLarger1 = d<b; bool bLarger2 = (a*c)<b; 布尔bLarger1始终为false(在两个版本中d都设置为65.0)。 变量bLarger2对于x64为false,但对于x86为true! 我很清楚浮点算术和圆角效应正在发生。 我也知道32位有时使用不同的指令进行浮动操作而不是64位构建。 但在这种情况下,我错过了一些信息。 为什么bLarger1和bLarger2之间首先存在差异? 为什么它只出现在32位构建中?

Microsoft Visual Studio 2010是否支持c99?

我想知道Microsoft Visual Studio 2010是否支持C99。 如果没有,我如何使用intptr_t和uintptr_t等标准类型?