decoding_encoding.c 在VS下调试错误总结

新建的C++工程


error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1>          d:\microsoft visual studio 11.0\vc\include\stdio.h(218) : 参见“fopen”的声明

解决:工程属性页|配置属性|C/C++|预处理器|预处理器定义|编辑添加“_CRT_SECURE_NO_WARNINGS”


error C2440: “=”: 无法从“void *”转换为“uint16_t *”
1>          从“void*”到指向非“void”的指针的转换要求显式类型转换

解决:samples = (uint16_t *)av_malloc(buffer_size);


“avcodec_find_encoder”: 不能将参数 1 从“int”转换为“AVCodecID”
1>          转换为枚举类型要求显式转换(static_cast、C 样式转换或函数样式转换)

解决:codec = avcodec_find_encoder((enum AVCodecID)codec_id);


error C2059: 语法错误:“{”

error C2143: 语法错误 : 缺少“;”(在“{”的前面)

error C2143: 语法错误 : 缺少“;”(在“}”的前面)

以上三条指的是c->time_base = (AVRational){1,25};的语法错误,标准C++不支持这种语法。

解决:c->time_base.num = 1; c->time_base.den = 25;


error C3861: “snprintf”: 找不到标识符

解决:snprintf函数并不是标准c/c++中规定的函数,但是在许多编译器中,厂商提供了其实现的版本。

在gcc中,该函数名称就snprintf,而在VC中称为_snprintf。 改成_snprintf就可以了


error C2440: “=”: 无法从“_TCHAR *”转换为“const char *”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

解决:output_type = (const char *)argv[1];

特别注意:这里单字节字符编码(C语言是ASCII)和双字节字符编码不匹配,有以下解决方法

法1:项目属性|配置属性|常规|项目默认值|字符集|使用 Unicode 字符集->使用多字节字符集

法2:可以把 int _tmain(int argc, _TCHAR* argv[]) 改为 C 文件中的 int main(int argc, char **argv),统一为单字节字符编码。

法3:const char *output_type; -> const _TCHAR *output_type;

          output_type = argv[1]; -> output_type = (const_TCHAR *)argv[1];

          这样就统一都为双字节的。字符串比较函数用wcscmp()替换strcmp(),这样就可以比较宽字符。


解决:下载的64位的库,平台是默认设置Win32,设置成x64就行了。


值得说明的是,

 \Windows\SysWOW64  文件夹下存放32位的库和应用程序 (WOW64 == Windows on Windows 64 bit );
\Windows\System32  文件夹下存放64位的库和应用程序。不要被名字迷惑了。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值