关于extern char *arr[];编译报错的问题

#include
#include

extern char *arr[];//在这行报错
int main(){

int i=0;
while(arr[i++])
    printf("%s\n",arr[i]);
system ("pause");
return 0;

}
用VS2010编译这段代码时报错:
IntelliSense: 不允许使用返回数组的函数

1个回答

通过论坛求助,编译已不再报错,以下为修改后代码:

extern char *arr[];
int main(){
    int i=0;
    while(arr[i++])
        printf("%s\n",arr[i]);
    system ("pause");
    return 0;
}
#include <stddef.h> 
char *arr[4] = {
    "1",
    "2",
    "3",
    NULL
};

问题中之所以报错,是因为arr[]数组未初始化和未定义

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
delphi调用c++ dll参数char* 的问题

我有一个c作的dll 具体说明如下 1、文件解密接口函数及参数说明: int __stdcall DecodeFile(char* InFile, //要解密的文件 char* Key, //解密的密钥 char* OutFile, //解密后的文件,在解密路径下的同名XML文件 char* Info); //提示信息函数返回 0 成功,非0失败。 2、动态调用实例: String jmfile = 要解密的文件路径; String key = 要解密的文件密钥; String strDllFile = "DecodeXMLFIle.dll"; //解密动态库文件名 DLLInst = LoadLibrary(strDllFile.c_str()); if( !DLLInst) Application->MessageBox( "DLL装载错误", "错误信息", MB_ICONERROR); else { /l输入函数声明 int (__stdcall *DecodeFile)(char* InFile, char* Key, char* OutFile, char* Info); DecodeFile = (int (__stdcall *)(char* InFile, char* Key, char* OutFile, char* Info))GetProcAddress( DLLInst, "DecodeFile"); if (DecodeFile) { char outfilestr[1000] = {0}; char msgInfostr[1000] = {0}; int dRes = DecodeFile(jmfile.c_str(),key.c_str(),outfilestr,msgInfostr); if(dRes != 0) { String Msgstr = "提示信息:解密失败 "+AnsiString(msgInfostr); Application->MessageBox(Msgstr, "错误信息", MB_ICONERROR); }else Application->MessageBox("成功", "成功", MB_OK); } } FreeLibrary(DLLInst); ---------------------------------------------- 如何用delph声明这个函数并调用呢

DLL导出函数调用本地函数,char**参数问题

先上3张图片 ![图片说明](https://img-ask.csdn.net/upload/201703/16/1489660310_712088.png) ![图片说明](https://img-ask.csdn.net/upload/201703/16/1489660319_78264.png) ![图片说明](https://img-ask.csdn.net/upload/201703/16/1489660325_559740.png) 图片1是导出函数,图片2是导出函数里面调用了本地函数的代码,可以看到这时候二级指针参数,char ** argv,这时候还是有值的,等我调试到了图片3的函数 argv参数的值就没有了。 这里附上个完整的导出函数代码 ``` extern "C" __declspec(dllexport) BOOL phadb_exeCmdLine(const char* strCmdLine,char *strOut) { /***************************************************************************************/ int t = 0; int flag = 0, stop = 0, num = 0; char argv[ADB_CMDLINEMAX][_MAX_PATH]; char **pargv = new char *[ADB_CMDLINEMAX]; for (int i = 0; i<ADB_CMDLINEMAX; i++) { pargv[i] = new char[_MAX_PATH]; } for (size_t i = 0; i < ADB_CMDLINEMAX; i++) { memset(argv[i], 0, _MAX_PATH); memset(pargv[i], 0, _MAX_PATH); } for (size_t i = 0; i < strlen(strCmdLine)/*.size()*/; i++) { if (strCmdLine[i]/*.at(i)*/ != 32){ memcpy(&argv[flag][num], &strCmdLine[t], 1); //argv[flag][num] = strCmdLine[t]/*.at(t)*/; num++; stop = 0; } else if (strCmdLine[t]/*.at(t)*/ == 32 && stop == 0) { flag++; num = 0; stop = 1; }t++; } for (size_t i = 0; i < ADB_CMDLINEMAX; i++){ memcpy(pargv[i], argv[i], _MAX_PATH); } int argc = flag; BOOL nRet = TRUE; if (argc > 0 ){ nRet = adb_commandline(argc, (char**)argv); fread(strOut, 1, 256, stderr); if (nRet == FALSE) { return nRet; } } return nRet; /*******************************************************************************************/ } ```

python调用c++函数时怎样传入const char*型的参数?

python代码: ``` ``` import ctypes so = ctypes.cdll.LoadLibrary lib = so("./build/liblandmark.so") path = "/face/360p/1.jpg" lib.landmark(1,ctypes.c_char_p(path)) ``` ``` c++代码: #include <cstdint> #include <fstream> #include <iostream> #include <string> #include "cv.h" #include "highgui.h" #include "face_detection.h" #include "face_alignment.h" #ifdef _WIN32 std::string DATA_DIR = "../../data/"; std::string MODEL_DIR = "../../model/"; #else std::string DATA_DIR = "./data/"; std::string MODEL_DIR = "./model/"; #endif extern "C" { seeta::FacialLandmark landmark(int argc, char*argv) { // Initialize face detection model seeta::FaceDetection detector("./build/seeta_fd_frontal_v1.0.bin"); detector.SetMinFaceSize(40); detector.SetScoreThresh(2.f); detector.SetImagePyramidScaleFactor(0.8f); detector.SetWindowStep(4, 4); // Initialize face alignment model seeta::FaceAlignment point_detector((MODEL_DIR + "seeta_fa_v1.1.bin").c_str()); //load image const char* img_path = argv; IplImage *img_grayscale = NULL; img_grayscale = cvLoadImage(img_path, 0); IplImage *img_color = cvLoadImage(img_path,1); int pts_num = 5; int im_width = img_grayscale->width; int im_height = img_grayscale->height; ``` ``` 这里的 const char* img_path 传不进去,应该怎么办。尝试过static_cast强制转换类型,将传入c++的char*类型的数据通过static_cast转换为const char* 但还是不行

C#调用C++ dll的参数转换问题,如何转换char **类型的参数到C#

这是C++代码 DLL_API int Onvif_Discovery(char** deviceaddress, int* nDevices); 这是C#调用 [DllImport("OnvifDll.dll",EntryPoint="Onvif_Discovery", CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)] public extern static int Onvif_Discovery(out IntPtr deviceAddr, ref int nDevices); 其中deviceAddr的参数我试过ref string,string,stringbulider,都报错,尝试读写受保护的内存。 初学C#的妹子一枚,希望哪位有经验的C#大神给予解答!万分感激!!!

C#调用C DLL(char *传出参数)时,报错参数不匹配

public class LLht { //手持机下载上传 [DllImport("llht.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public static extern int llht_down(string PCFile, string HTFile, int port, int baud, int SerialNO); [DllImport("llht.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public static extern int llht_up(string PCFile, string HTFile, int iPort, int iBaud, int iSerialNo); //取得HT 的文件放在FILEBUFF 中 每个文件的长度不超过12字节,返回是文件的数目 [DllImport("ht32dll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public static extern long GetHtFile(ref byte filebuff, uint iPort, long iBaud); } 这就是DLL的入口函数,没有DLL的头文件,注释也只有那一行,long GetHtFile(char * filebuff, unsigned int iPort, long iBaud);这是函数原型。 调用代码如下: string name = "000000000000"; byte[] filename = new byte[12]; for (int i = 0; i < name.Length; i++) { filename[i] = (byte)name[i]; } long read = LLht.GetHtFile(ref filename[0], comid, 57600);//此行报错 MessageBox.Show(read + ":" + filename[0].ToString()); 报错内容为:对 PInvoke 函数“数据审核!数据审核.LLht::GetHtFile”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。 求助各位大神

unsigned char** 用C#如何表示?

有一个第三方提供的dll,其中一个方法是C写的方法 int tele(unsigned char** imageStream), 我在C#中引用如下: [DllImport("Dmytr.dll", EntryPoint = "tele", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)] public static extern int tele(IntPtr imageStream); 这样写,对吗?

关于字符串常量的问题?

``` #include<stdio.h> extern char * stri(); int main(void) { char *p = stri(); printf("%s\n", p); return 0; } char * stri() { char arr[] = "hello world"; return arr; } ``` 这样输出的是乱码。 ``` #include<stdio.h> extern char * stri(); int main(void) { char *p = stri(); printf("%s\n", p); return 0; } char * stri() { char *arr = "hello world"; return arr; } ``` 这样输出的是hello world 为什么呢?字符串常量的生命周期不是整个程序的生命周期吗?为什么第一个不行。(刚学C语言不太懂,求大佬解答)。。。。。

C#调用dll,使用intPtr接收char*返回值不一致

在C#中调用C的dll,遇到char* 使用 intPtr接收,返回值与C中char 指针不一致 C结构体 typedef struct { BYTE ErrCode; int* errstring; } ERRPARAMS; 函数 BYTE DSCUDAPICALL dscGetLastError(ERRPARAMS* errparams); C#结构体 [StructLayout(LayoutKind.Sequential)] public struct ERRPARAMS { public byte ErrCode; public IntPtr errstring; } 函数 [DllImport("dscud.dll", EntryPoint = "dscGetLastError", CharSet = CharSet.Unicode, SetLastError = false, CallingConvention = CallingConvention.Cdecl)] extern unsafe public static byte dscGetLastError(ERRPARAMS* errparams); 执行结果: 在C中 ErrCode是5 errstring是0x1007eb80 可以转换成字符串 在C#中 ErrCode是5 errstring是0x00000010 使用Marshal.PtrToStringAnsi转换为空,不是想要的地址 将intPtr改成string/String/StringBuilder/char[]都试过了,函数会报内存异常的错误。 且大神解答,非常感谢。

PROC 预编译 extern void sqliem(char *, int *);

``` /* Forms Interface */ static const int IAPSUCC = 0; static const int IAPFAIL = 1403; static const int IAPFTL = 535; extern void sqliem(char *, int *); ``` 如上,PROC预编译都会有如上代码生成。 问题: 我在这个C文件中include了一个oracle的头文件<sqlcpr.h>。 这个头文件在oracle的public目录下,其中也有 extern void sqliem(char *, int *); 这句。导致编译的时候会提示我两边不兼容。 以前用VC6.0没有提示这个错误,换到VC2012上就会提示了。 请问有什么办法消解这个ERR? 注:1.不能修改sqlcpr.h,这个文件不在本工程目录下。 2.C文件中的extern void sqliem(char *, int *);是PROC预编译自动生成的, 不知道该怎么修改PROC编译器让他不加这行代码?

C语言关于指针的问题。

本人刚学c预言,遇到了关于指针的问题。 代码如下: ``` #include<stdio.h> extern char * aaa(); int main(void) { char *p = aaa(); printf("%d\n", *p); return 0; } char * aaa() { char * arr = "dsfxsas"; int a = 2; return &a; } ``` 运行结果: ``` 2 ``` 为啥函数aaa()中的a变量,在函数运行完后没有被销毁,在主函数中被输出了。

关于extern变量的一些问题

首先,有谁能告诉我extern具体的作用? 接下来是一段报错的代码: 源文件1: ``` #include <stdio.h>/*包含头文件*/ /*进入主函数*/ int main(){ extern int ex; printf("%d", ex); return 0; } ``` 源文件2: ``` #include <stdio.h> main() { int ex; ex = 100; ``` 两段代码都在第一行产生错误: > 无法解析的外部符号 _ex 然而我那一行根本没有ex啊? 此外整个project报错:一个无法解析的外部命令 这是怎么回事?

c语言 函数指针编译出错

#ifndef LIBAO_H #define LIBAO_H typedef enum{wav,wim,mp3} io_type_t; typedef struct IOINFO{ io_type_t type; //文件类型编号 char *name; //wav wim,mp3等 char *author; //作者 char *time; //编写时间 char *describe; //模块描述 } io_info_t; typedef struct LIBIO{ io_info_t *info; //模块信息 int (*ropen)(char *devname,int *sample,short *channel,short* bit) //打开文件 { printf("1\n"); } } io_t; extern io_t *getfile(io_type_t type); #endif libio.h:16: 错误:expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token

__declspec(dllexport)

问题和代码如下(问题在代码中有标注) #ifndef rcs_id_api_h #define rcs_id_api_h #if !defined(lint) static char* doors_ers_rcs_id_api_h = (char*)"@(#)DOORS %full_filespec: api.h~8.1.4:incl:ERS#1 % %date_created: Tue Jul 16 15:41:59 2013 %"; #endif #endif /********************************************************************** ** api.h */ /* Licensed Materials - Property of IBM - some unique copyrights (i.e., the ability to copy, modify, distribute) may be licensed in certain circumstances (e.g., sample/template code intended to be used by customers to build upon and distribute as their own products). DOORS - %full_filespec: api.h~8.1.4:incl:ERS#1 % %date_created: Tue Jul 16 15:41:59 2013 % (c) Copyright IBM Corporation 1993, 2008. All Rights Reserved. U.S. Government Users Restricted Rights: Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ #ifndef DOORS_API_H #define DOORS_API_H /* Required to build Serena Version Manager */ #ifndef NLS_ #define NLS_(a)a #endif /* Type seperation for 64 vs 32 bit variant */ #if defined (_WIN64) # if defined (datum) # undef datum # endif # define datum long long #else # if defined (datum) # undef datum # endif # define datum long #endif /* Categorize the type of C/C++ we are using */ #if defined(__cplusplus) || defined(c_plusplus) #define API_CPLUSPLUS 1 #else #define API_CPLUSPLUS 0 #endif #if defined(__STDC__) || API_CPLUSPLUS || defined(_WIN32) #define API_ARGS(args) args #else #define API_ARGS(args) () #endif /********************************************************************** ** Some typical CPP definitions */ #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #ifndef global #define global /* global entry point (extern in .h file) */ #define local static /* local entry point */ #define globalvar /* global variable (externvar .in .h file) */ #define externvar extern /* global variable .h file entry */ #endif #if defined(_WIN32) #define API_WIN32 #ifndef API_DLL #define API_DLL _declspec(dllexport) 编译的时候总在提示在(dllexport)前面那个括号出少了构造函数和析构函数,求大神指教 #define API_CALL _stdcall #endif #define API_EXTERN(type) API_DLL type API_CALL #define API_EXTERNVAR API_DLL #else #define API_EXTERN(type) extern type #define API_EXTERNVAR externvar #endif #ifndef NULL #define NULL 0 #endif #ifndef NUL #define NUL '\0' #endif /* heap things */ #ifndef mnew #define mnew(Type) (Type*)malloc(sizeof(Type)) #define msave(Str) strcpy((char *)malloc(qss_strlen(Str)+1), (Str)) #define mnew_array(Type, Num) (Type*)malloc(sizeof(Type)*(Num)) #endif /* miscellaneous */ #ifndef M_Min #define M_Min(a, b) ((a) < (b) ? (a) : (b)) #define M_Max(a, b) ((a) > (b) ? (a) : (b)) #define M_Abs(a) ((a) < 0 ? -(a) : (a)) #define M_Xor(a, b) (((a) || (b)) && ( ! ((a) && (b)))) #endif /* Macro token concatenation */ #ifndef CAT_ #define ID_(x) x #ifdef __STDC__ #define CAT_(x,y) x ## y #else #define CAT_(x,y) ID_(x)y #endif #endif #ifndef StrMP_ #if defined (__STDC__) || defined(API_WIN32) #define StrMP_(x) (char *)#x #else #define StrMP_(x) (char *)NLS_("x") #endif #endif /* API Stuff */ /* Error States */ /* * CL58 - had to reintroduce apiErrorStates typedef, * because api.h is included by C (not C++) code which * uses apiErrorStates as a type name. */ enum apiErrorStates_ { DOORS_API_OK, DOORS_API_PARSE_BAD_DXL, DOORS_API_SEND_BAD_DXL, DOORS_API_CONNECT_FAILED, DOORS_API_ERROR }; typedef enum apiErrorStates_ apiErrorStates; #define apiInstall(proto,fn) apiInstallN(proto,StrMP_(fn),fn) #define BEGIN_FN(name,ins,outs) \ local int name API_ARGS((void)) { \ char* name__ = StrMP_(name); \ int inp_i_ = ins; \ int outp_i_ = ins; \ int inn_i_ = ins; \ int outn_i_ = outs; #define END_DECLS \ if (apiParCheck(name__,inn_i_,outn_i_,inp_i_)) ; else goto err_exit__ #define END_FN \ err_exit__: \ apiResCheck(name__,inp_i_,inn_i_,outp_i_,outn_i_); \ return (outn_i_ - inn_i_); } #define P_(t,x) \ t x = (t)apiPar(inp_i_--) #define RETURN_(x) \ apiReturn((datum)x,outp_i_--); /* for loop perm macros */ #define BEGIN_FOR_DO(name,ft,f,st,scan) \ local int name (char *pc) \ { \ char* loop; \ int irv = 0; \ st* scanp__; \ ft f; \ st scan; \ scanp__ = (st*)apiLoop(pc,&loop,(void **)&f,&irv); \ if (scanp__ == NULL) return irv; \ { #define PROCESS_DO(scan) \ {*scanp__ = scan;\ if (apiLoopBody(loop,&irv)) break;} #define END_FOR_DO \ } \ return apiLoopDone(loop,irv,pc); \ } /* Definitions */ #if API_CPLUSPLUS extern NLS_("C") { #endif API_EXTERN(void) apiError API_ARGS((char *format, ...)); API_EXTERN(void) apiWarn API_ARGS((char *format, ...)); API_EXTERN(int) apiParCheck API_ARGS((char *n, int ins, int outs, int ip)); API_EXTERN(void) apiResCheck API_ARGS((char *n, int ip, int in, int op, int on)); API_EXTERN(datum) apiPar API_ARGS((int ip)); API_EXTERN(void) apiReturn API_ARGS((long r, int op)); API_EXTERN(char*) apiLoop API_ARGS((char* pc, char** loop, void** fp, int* ret)); API_EXTERN(int) apiLoopBody API_ARGS((char* loop, int* irvp)); API_EXTERN(int) apiLoopDone API_ARGS((char* loop, int irv, char* pp)); API_EXTERN(void) apiMainProg API_ARGS((int argc, char* argv[], char* n, char* ext, char* include, void (*init)(void), void (*done)(void))); API_EXTERN(void) apiInitLibrary API_ARGS((char* n, char* ext, char* include)); API_EXTERN(void) apiFinishLibrary API_ARGS((void)); API_EXTERN(void) apiInstallN API_ARGS((char* proto, char* name, int (*)())); API_EXTERN(void) apiParse API_ARGS((char *format, ...)); API_EXTERN(void) apiConnect API_ARGS((char *s)); API_EXTERN(void) apiConnectSock API_ARGS((unsigned short portno, char* host)); API_EXTERN(void) apiConnectSockV2 API_ARGS((unsigned short portno, char* host)); API_EXTERN(void) apiSend API_ARGS((char *format, ...)); API_EXTERN(void) apiAuthenticatedSend API_ARGS((char *response, char *format, ...)); API_EXTERN(void) apiSendTimesout API_ARGS((int tmt, char *format, ...)); API_EXTERN(void) apiSendFile API_ARGS((char* f)); API_EXTERN(void) apiExitOnError API_ARGS((int onoff)); API_EXTERN(void) apiQuietError API_ARGS((int onoff)); API_EXTERN(int) apiGetErrorState API_ARGS((void)); API_EXTERN(void*) apiGetIPC API_ARGS((void)); API_EXTERN(int) apiSetIPC API_ARGS((void* newIPC)); API_EXTERN(void) apiDeleteIPC API_ARGS((void* newIPC)); API_EXTERN(void) apiFree API_ARGS((void*)); API_EXTERN(char*) apiAuthenticate API_ARGS((void)); #if API_CPLUSPLUS } #endif #endif /* DOORS_API_H */ ``` ```

怎么正确调用OBJ文件的符号

1:使用objcopy 将一个图片文件转换成目标文件, 2:通过objdump可看到目标文件的符号 3:写个程序声明并引用里面的符号,试图打印起始地址,结束地址以及size,一运行就死机(segment default) extern char * _binary_image_jpg_start; extern char * _binary_image_jpg_end; extern int _binary_image_jpg_size; void main() { printf(..............); } 如何使用目标文件里的这些符号啊?

有关于C中gets()函数返回值问题

做练习时, gets(str)!=NULL 被编译器警告说 "compartion between pointer and integer",说明gets()返回值变为int 具体代码如下 ``` #include<stdio.h> #define MAX 80 void delspace(char * p1); int main(void){ char str[MAX]; puts("Please enter the string:"); //gets(str); //while(*str != '\0'){ while(gets(str)!=NULL){ delspace(str); puts("The result is:"); puts(str); puts("Please enter other string:"); // gets(str); } puts("Done!"); return 0; } ``` 编译器版本 ``` gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) ``` 在 user/include/stdio.h中的定义,但是我没找到NULL的定义 ``` extern char *gets (char *__s) __wur __attribute_deprecated__; ``` 后来我做了两个测试 ``` test.c:6:11: warning: format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘int’ [-Wformat=] printf("%p",gets(name)); test.c:6:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘void *’ [-Wformat=] printf("%d\n",NULL); ```

51单片机加入定时器的定义和中断后,手机APP与单片机只能连接几秒,问题出在哪里

在原来的单片机代码中加入void TF0_isr() interrupt 1和在void InitUART(void)里定义了定时器 ET0=1;TH0=56320/256; L0=56320%256; TR0=1;后,拷到单片机里,手机APP连接WiFi建立链接后,几秒后断开链接,有时甚至无法建立链接。 是串口中断和定时器中断冲突了吗? 请问问题出在哪里,怎么解决 原来正常的情况:单片机和APP连接后,APP能控制LED1、2的亮灭,并显示LED等的状态 #include "DHT11.h" #include <stdio.h> #include "string.h" extern unsigned char F16T,F16RH; //温湿度数据 sbit LED1=P3^7; sbit LED2=P3^6; #define uchar unsigned char #define uint unsigned int unsigned char idata Rxbuff[50],Rxnum; unsigned char Recwifi_data[5]; char *strx=0; char clinetid;//连接ID unsigned char getflag;//获取标志 void Get_Clinet(void); void InitUART(void) //这是串口和定时器的基本配置,配置他的波特率是9600.这些参数都是标准的。 { TMOD|= 0x21; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; //启动中断系统 ES = 1; TR1 = 1; ET0=1;// 定时器的定义 TH0=56320/256; //计数起点为56320 ==10ms溢出一次 TL0=56320%256; TR0=1; } void Clear_Buffer(void)//清空缓存 { int i; // for(i=0;i<50;i++) // Rxbuff[i]=0;// Rxnum=0; } /******************************************************************************/ void delayms(unsigned int x) { unsigned int i; while(x--) for(i=125;i>0;i--); } /* * UART 发送一字节 */ void UART_send_byte(char dat) { SBUF = dat; while (TI == 0); TI = 0; } /* * UART 发送字符串 */ void Send_Str(unsigned char *buf) { while (*buf != '\0') { UART_send_byte(*buf++); } } void ESP8266_SERVER(void)//服务器建立 { Send_Str("AT\r\n"); delayms(500); Send_Str("AT\r\n"); delayms(500); Send_Str("AT\r\n"); delayms(500); Send_Str("ATE0\r\n"); //关闭回显 delayms(500); Send_Str("AT+CWSAP=\042ESP8266_001\042,\0421234567890\042,5,3\r\n"); //设置显示名称和密码 delayms(500); Send_Str("AT+CIPMUX=1\r\n");//启动多连接,建立服务器都需要配置 delayms(500); Clear_Buffer(); Send_Str("AT+CIPSERVER=1,8888\r\n");//建立服务器 delayms(500); strx=strstr((const char*)Rxbuff,(const char*)"OK");//等待建立完成 while(strx==NULL) { Clear_Buffer(); delayms(500); strx=strstr((const char*)Rxbuff,(const char*)"OK");//等待建立完成 } Clear_Buffer(); } void Get_Clinet(void)//判断是否获取到了客户端接入 { uchar i; strx=strstr((const char*)Rxbuff,(const char*)"CONNECT");//返回连接值 if(strx) { Clear_Buffer(); getflag=1; } strx=strstr((const char*)Rxbuff,(const char*)"CLOSE");//返回断开连接 if(strx) { Clear_Buffer(); getflag=0; } if(getflag) { strx=strstr((const char*)Rxbuff,(const char*)"+IPD");//有数据返回 if(strx)//正常获取数据 { clinetid=strx[5]; strx=strstr((const char*)Rxbuff,(const char*)":");//有数据返回 for(i=0;i<2;i++) Recwifi_data[i]=strx[1+i]; //获取手机对LED的控制 if( Recwifi_data[0]=='1'&& Recwifi_data[1]=='0' )//关灯 LED1=1; else if( Recwifi_data[0]=='1'&& Recwifi_data[1]=='1' )//开灯 LED1=0 ; if( Recwifi_data[0]=='2'&& Recwifi_data[1]=='0' )//关灯 LED2=1; else if( Recwifi_data[0]=='2'&& Recwifi_data[1]=='1' )//开灯 LED2=0 ; Clear_Buffer(); } } } void Send_DATA(uchar *buffer) { uchar i; Send_Str("AT+CIPSEND=0,7\r\n"); delayms(300); Send_Str(buffer);//发送数据 delayms(100); strx=strstr((const char*)Rxbuff,(const char*)"SEND OK");//返回OK while(strx==NULL) { delayms(100); strx=strstr((const char*)Rxbuff,(const char*)"SEND OK");//返回OK } strx=strstr((const char*)Rxbuff,(const char*)"+IPD");//有数据返回 ,顺便判断是否有数据返回 if(strx)//正常获取数据 { clinetid=strx[5]; strx=strstr((const char*)Rxbuff,(const char*)":");//有数据返回 for(i=0;i<5;i++) Recwifi_data[i]=strx[1+i]; //获取上位机设定的报警值 Clear_Buffer(); } Clear_Buffer(); } void main() { unsigned char Tx_Buf[10]; uchar i; unsigned char LEDstatus;//灯的状态 delayms(500); delayms(500); delayms(1000); //延时一段时间,让WIFI模块稳定 InitUART(); //初始化串口 ESP8266_SERVER(); IP = 0x10; // PS = 1; // PT0=0; //初始化ESP8266 while(1) { Get_Clinet(); if(getflag) { getDHT11(); //获取温湿度值 Tx_Buf[0]='T'; //帧头 Tx_Buf[1]=F16T/10%10+0x30; //将温湿度数据送往发送数组,送给蓝牙模块让手机APP显示 Tx_Buf[2]=F16T%10+0x30; Tx_Buf[3]=F16RH/10%10+0x30; Tx_Buf[4]=F16RH%10+0x30; LEDstatus=LED1; Tx_Buf[5]=LEDstatus+0x30;//发送灯的状态 LEDstatus=LED2; Tx_Buf[6]=LEDstatus+0x30; Send_DATA(Tx_Buf) ;//发送数据 } } } /*****************串口接收中断函数,接收蓝牙模块的数据*********************/ void UARTInterrupt(void) interrupt 4 { if(RI) { ES=0; RI = 0; Rxbuff[Rxnum++]=SBUF; if(Rxnum>=50) Rxnum=0; ES=1; } } void TF0_isr() interrupt 1 //10ms 进入一次 { static int c1; //执行一条指令12个周期,12/11.059M =1.08507us 10ms需要9216个周期 TH0=56320/256; //重装初值 TL0=56320%256; c1++; if(c1>400){ LED1=0; } if(c1>600) { LED1=1; c1=0; } }

C语言中多文件的全局变量声明问题

具体问题请麻烦看链接 [C语言遇到问题](http://blog.csdn.net/u013610563/article/details/50727619 "") 我写了一个函数void match(char* list)/*作用是在list字符串中查找给定子字符串*/ 又写了一个函数void find(void (*match)(char*))/*因为想用函数指针,就把match函数传递进去了 然后find()函数遍历字符串数组。 最后在main()函数中写字符串数组char* shuzu[]的具体内容 然后把match函数,find函数,main函数保存在不同的.c文件中 最后写了一个头文件,其中保存了函数申明,还有那个字符串数组的申明 我是这样写的extern char* shuzu[]; 最后遇到的问题是编译时告诉我find()函数遇到未定义变量shuzu[],,可我不是把它定义成 全局变量保存在头文件中了吗?

C++ extern 关键词错误

我用的是Vs2015 我在主程序cpp文件中如果使用extern 关键词引用另外一个文件中定义的一个变量, vs报错。但是如果在另一个文件中使用extern引用主程序cpp中定义的一个变量却是可以的。代码如下: // file1.cpp #include isotream int a=0; // 定义变量 ... // file2.cpp #include iostream extern int a; // 引用file1.cpp中的变量 int main() { std::cout<<a<<std::endl; // 报错unresolved external symbol "int a" // (?a@@3HA) } 这种情况编译器不会报错: // file1.cpp #include iostream extern int a; //file2.cpp #include iostream int a=0; int main() { }

不使用CGo将Go字符串转换为C字符串

<div class="post-text" itemprop="text"> <p>I'm trying to call some ioctls from Go, and some of them take C strings as parameters. For example, in C:</p> <pre><code>/* When the user asks to bind a message name to an interface, they use: */ struct kbus_bind_request { __u32 is_replier; /* are we a replier? */ __u32 name_len; char *name; }; extern int kbus_ksock_bind(kbus_ksock_t ksock, const char *name, uint32_t is_replier) { int rv; kbus_bind_request_t bind_request; bind_request.name = (char *) name; bind_request.name_len = strlen(name); bind_request.is_replier = is_replier; rv = ioctl(ksock, KBUS_IOC_BIND, &amp;bind_request); if (rv &lt; 0) return -errno; else return rv; } </code></pre> <p>I converted the struct to a Go struc like this:</p> <pre><code>type kbus_bind_request struct { is_replier uint32 /* are we a replier? */ name_len uint32 name unsafe.Pointer // char* } </code></pre> <p>Now, how do I convert a Go <code>string</code> to a C string stored in an <code>unsafe.Pointer</code>? I don't want to use CGo as I am cross-compiling and it makes things a pain.</p> </div>

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java校招入职华为,半年后我跑路了

何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

@程序员:GitHub这个项目快薅羊毛

今天下午在朋友圈看到很多人都在发github的羊毛,一时没明白是怎么回事。 后来上百度搜索了一下,原来真有这回事,毕竟资源主义的羊毛不少啊,1000刀刷爆了朋友圈!不知道你们的朋友圈有没有看到类似的消息。 这到底是啥情况? 微软开发者平台GitHub 的一个区块链项目 Handshake ,搞了一个招募新会员的活动,面向GitHub 上前 25万名开发者派送 4,246.99 HNS币,大约价...

再不跳槽,应届毕业生拿的都比我多了!

跳槽几乎是每个人职业生涯的一部分,很多HR说“三年两跳”已经是一个跳槽频繁与否的阈值了,可为什么市面上有很多程序员不到一年就跳槽呢?他们不担心影响履历吗? PayScale之前发布的**《员工最短任期公司排行榜》中,两家码农大厂Amazon和Google**,以1年和1.1年的员工任期中位数分列第二、第四名。 PayScale:员工最短任期公司排行榜 意外的是,任期中位数极小的这两家公司,薪资...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

win10暴力查看wifi密码

刚才邻居打了个电话说:喂小灰,你家wifi的密码是多少,我怎么连不上了。 我。。。 我也忘了哎,就找到了一个好办法,分享给大家: 第一种情况:已经连接上的wifi,怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡,选择状态 然后像下图一样: 第二种情况:前提是我不知道啊,但是我以前知道密码。 此时可以利用dos命令了 1、利用netsh wlan...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

立即提问