c语言一些技巧经验

一、在C语言中,可以使用Windows API来创建提示窗口。下面是一个简单的示例代码:

#include <windows.h>
int main() {
    MessageBox(NULL,"Hello, world! ","提示窗口",MB_OK);
    return 0;
}

上述代码调用了MessageBox函数来创建一个提示窗口。MessageBox函数有四个参数:.hwnd:窗口的句柄,可以设置为NULL。

. lpText:提示信息的字符串。

. lpCaption:窗口标题的字符串。

二、warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

1、错误代码展示

函数定义:

void readImage(char *inputPath);

函数使用:

 readImage("C:\\xxxx\\girl.jpg");

2、原因分析

在上面的方法中,方法的参数需要我们传递一个指针类型的字符。而我们在使用该方法的时候传递的确实一个常量。会导致常量强转为指针,因为会报这么一个警告。这个警告在有些编译器上就直接通不过了,有些编译器上可以通过。

3、解决办法

解决办法也非常的简单,如下所示:

char *inputPath = (char*)"C:\\xxx\\girl.jpg";
readImage(inputPath);

三、报错waring:multi-character character constant [-Wmultichar]

1、检查你的char数组的元素是否单个元素进行赋值,如char[n] = ‘a’,只能是一个元素。

2、检查输出的单引号问题

3、printf和cout输出%c类型是的空格,对于cin最最好是分开输出空格,printf就不会出现问题。

四、解决C语言编译后无交互不想显示黑框,却总是带着黑框的问题

1. 编写了wIndows窗口程序或者默认的main运行程序,没有交互,只是有序执行一些命令,增加了下面的设置,但还是有个黑框,设置为:

#pragma comment(linker, "/ENTRY:WinMain")
#pragma comment(linker, "/SUBSYSTEM:WINDOWS")

2. 利用WinHex工具打开编写后的程序,在0xD0C位置,将03修改为02保存,即可显示黑框。网上说的好像是0x130~0x140的区间,可是这个区间没有03的数值。

其他教程:VC中如何编译无Console窗口的Console程序

五、Windows网络编程 undefined reference to `__imp_WSAStartup‘ 解决办法

第一步:头文件末尾增加一行:#pragma comment (lib,“ws2_32”),如下:

#include <string.h>
#include <stdio.h>
#include <winsock2.h>
#include <time.h>

#pragma comment (lib,"ws2_32")    //静态加入一个lib文件,也就是库文件ws2_32.lib文件,提供了对网络相关API的支持
/*
关于WSAStartup方法和WSACleanup方法引用出错的解决:
错误:
编译的时候出现 
undefined reference to `__imp_WSAStartup'
undefined reference to `__imp_WSACleanup'
在一般编译器中不会直接连接编译wsock动态库,需要手动添加库
首先可以尝试代码中直接引入动态库,#pragam comment(lib,"ws2_32");
如果不行再手动添加库
在vc中,点项目(project-->project option)在makefile中输入-L"ws2_32" 
在dvc C++中点击工具(Tool)-->编译选项(Compile Option)在编译命令框中输入-lwsokt32
*/

第二步:gcc编译命令后添加 -lwsock32,我建立的批处理.bat,把cpp文件拖动上来自动编译、压缩、加壳如下:

@ECHO OFF
SET filename=%1
SET newname=%filename:~0,-4%.exe
gcc %filename% -o %newname% -lwsock32 && strip %newname% && upx %newname%
pause