我是c的新手,我得到了一些其他人在Windows上编写的源代码.
尝试在linux上编译后我有错误,因为linux不支持DWORD,WORD和UINT32.我有6个文件例如.啊,Ac,Bh,Bc,Ch,Cc这些关键字都在所有文件中.
所以我在考虑两种可能的解决方案.哪个更好#define或typedef.
1)
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef unsigned int UNINT32;
Run Code Online (Sandbox Code Playgroud)
2)
#define DWORD unsigned long
#define WORD unsigned short
#define UINT32 unsigned int
Run Code Online (Sandbox Code Playgroud)
对于第二部分,我想知道我应该把这些声明放在哪里.他们应该进入头文件,还是应该进入源文件?
例如,我应该在头文件或源文件中执行类似的操作吗?
#ifdef WIN32
/* windows stuff */
#else
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef unsigned int UNINT32;
#endif
Run Code Online (Sandbox Code Playgroud)
非常感谢上述建议,
我正在编写一个服务器端node.js应用程序,它使用express来处理HTTP请求,我正在添加websockets(socket.io)支持.但是,我无权访问启动HTTP服务器的代码.我正在编写一个快速路由器和函数来处理各种URL.我的代码看起来像:
var express = require('express');
var router = express.Router();
router.post( myURL, myFunction );
Run Code Online (Sandbox Code Playgroud)
在设置路由器时,我想使用socket.io来监听websocket连接.我无法传递express或express()进入require('socket.io')( xxx ),我需要传递http.Server对象.但由于我没有启动服务器,我怎么能得到它?
我从语言设计的角度来问这个问题.所以我试图找出答案
this什么?this是错误的,或者可以改进?为了澄清我为什么不安this,请考虑这个例子:
var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
Run Code Online (Sandbox Code Playgroud)
请注意遗留的对象f()是多么容易丢失:与之分离a,this成为全局对象(window对于浏览器).
现在考虑:
var newA = function(){
var self = {};
self.f = function(){ return self; }
return self;
}
var a = newA();
var f = a.f;
// f() == a.f() !
Run Code Online (Sandbox Code Playgroud)
this在完全不使用的情况下,无论方法在何处或如何使用,我们都能够建立和维护对象上下文.我不禁想到,凭借封闭所提供的力量,this变得多余,甚至可能有点危险......
我不是在反对某些仇杀this,或者想要开始争论; 我只是想更好地理解它.我确实理解"这个"可能很有用,但也认识到它也可能令人困惑 ......当然,对于初学者而言,也许对专家来说也会让人感到困惑. …
我正在建立到IIS Web服务器的HTTP连接,并发送一个POST请求,其中包含使用Transfer-Encoding:chunked编码的数据.当我这样做时,IIS只是关闭连接,没有错误消息或状态代码.根据HTTP 1.1规范,
所有HTTP/1.1应用程序必须能够接收和解码"分块"传输编码
所以我不明白为什么它(a)不处理该编码和(b)它没有发回状态代码.如果我更改发送Content-Length而不是Transfer-Encoding的请求,则查询会成功,但这并不总是可行的.
当我对Apache尝试相同的事情时,我得到一个"需要411长度"的状态和一条消息"chunked Transfer-Encoding forbidden".
为什么这些服务器不支持此编码?
我正在更改一个过去采用整数参数的旧例程,以便它现在采用对象的const引用.我希望编译器能告诉我调用函数的位置(因为参数类型错误),但是对象有一个构造函数,它接受一个整数,所以编译器创建一个临时对象,而不是失败,传递给它整数,并将对它的引用传递给例程.示例代码:
class thing {
public:
thing( int x ) {
printf( "Creating a thing(%d)\n", x );
}
};
class X {
public:
X( const thing &t ) {
printf( "Creating an X from a thing\n" );
}
};
int main( int, char ** ) {
thing a_thing( 5 );
X an_x( 6 );
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我希望该X an_x( 6 )行不能编译,因为没有X构造函数需要int.但它确实编译,输出如下:
Creating a thing(5)
Creating a thing(6)
Creating an X from a thing …Run Code Online (Sandbox Code Playgroud) 我试图将一个非null终止的char数组输出到一个文件.
实际的是,我收到数据包,然后打印他们的字段.
现在,因为这些字段不是空终止的,例如,数据段的大小为512但可能完全占用也可能不完全占用.
当我将这些数据写入文件时,我使用简单的<<重载函数,它不知道有关实际数据的任何事情,只查找数据段的终止.
那么,我怎么能告诉输出函数只写这个特定数量的字节?
而不是使用这样的东西,每次调用都很昂贵:
enter code here
bytescopied = strncpy(dest, src, maxbytes);
if (bytescopied < 0) { // indicates no bytes copied, parameter error
throw(fit); // error handler stuff here
} else if (bytescopied == maxbytes) {
dest[maxbytes-1] = '\0'; // force null terminator
}
Run Code Online (Sandbox Code Playgroud) 组,我确定这是用户错误,但我试图将一列数字从浮点数转换为varchar.它适用于7位以下的任何数字,但如果数字为7位数,则将其转换为科学记数法或者他们称之为的数字.例如:
440000显示440000 1299125显示1.29913e + 006
看起来它正在向上舍入7位数字......我不知道为什么.
我试图转换它,因为我需要将它连接到其他所有VARCHAR字段
任何帮助是极大的赞赏
以下是变量的声明:
string strFirstName;
string strLastName;
string strAddress;
string strCity;
string strState;
double dblSalary;
string strGender;
int intAge;
Run Code Online (Sandbox Code Playgroud)
...做一些"cin"语句来获取数据......
retcode = SQLPrepare(StatementHandle, (SQLCHAR *)"INSERT INTO EMPLOYEE ([FirstName], [LastName], [Address], [City], [State], [Salary], [Gender],[Age]) VALUES (?,?,?,?,?,?,?,?)", SQL_NTS);
retcode = SQLBindParameter(StatementHandle, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 50, 0 &strFirstName,0, NULL);
retcode = SQLBindParameter(StatementHandle, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 50, 0, &strLastName,0, NULL);
retcode = SQLBindParameter(StatementHandle, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 30, 0, &strAddress,0, NULL);
retcode = SQLBindParameter(StatementHandle, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 30, 0, &strCity,0, NULL);
retcode …Run Code Online (Sandbox Code Playgroud) 当我的应用程序从服务器(通过https)请求特定URL时,它会获得301 Moved Permanently重定向.但是,Location标头格式错误.我看到这样的事情:
> GET https://myserver/url HTTP/1.1
< 301 Moved Permanently
< Location: https://redirectedserverhttp://myserver/url
Run Code Online (Sandbox Code Playgroud)
如果我在没有主机的情况下发送请求,我会得到一个格式正确的URL:
> GET /url HTTP/1.1
< 301 Moved Permanently
< Location: https://redirectedserver/url
Run Code Online (Sandbox Code Playgroud)
我正在通过代理服务器并根据RFC 2068第5.1.2节," 当向代理发出请求时,必须使用absoluteURI表单 "所以看起来我正在以正确的方式执行它但代理正在响应不正确.如果我通过浏览器尝试这个,curl或wget它工作正常.我查看了wget代码,逻辑看起来像:
if( proxy && !https ) {
use absoluteURI
} else {
use relativeURI
}
Run Code Online (Sandbox Code Playgroud)
Wget甚至在其源代码中有评论:
/* When using SSL over proxy, CONNECT establishes a direct
connection to the HTTPS server. Therefore use the same
argument as when talking to the server directly. */
Run Code Online (Sandbox Code Playgroud)
这是在某处定义的实际标准吗?如果应该使用绝对URI表单,为什么其他工具不使用它,为什么它失败了?
在我的django应用程序(在Red Hat上运行的Django 1.6.0,python 2.7.5)中,我的数据库驱动程序从ctypes看到错误:
TypeError:类型不兼容,使用LP_c_int实例而不是LP_c_int实例
代码如下:
is_null = value is None
param.value.is_null = pointer(c_int(is_null)) <-- error occurs on this line
Run Code Online (Sandbox Code Playgroud)
我对ctypes并不是很熟悉(我继承了这段代码),但从表面上看,此错误消息没有任何意义。该代码已经运行了多年,但现在到处都可以看到此错误。我做错了什么吗?
由于IljaEverilä的评论,这是一个最小的复制:
from ctypes import *
from ctypes import _reset_cache
class DataValue(Structure):
"""Must match a_sqlany_data_value."""
_fields_ = [("buffer", POINTER(c_char)),
("buffer_size", c_size_t),
("length", POINTER(c_size_t)),
("type", c_int),
("is_null", POINTER(c_int))]
d = DataValue()
_reset_cache()
is_null = False
d.is_null = pointer( c_int( is_null ) )
Run Code Online (Sandbox Code Playgroud)