C++ Sprintf_s函数补全缺省内容

我数据库里面的字段类型是varchar,现在有name和password两个字段
现在要update_
比如

update logininfo set password = '222' where name='111';

用sprintf_s可以动态设置password和name的值
图片说明

C语言里,%s是C风格的字符串,不是string吧,
所以我用string.data函数把string类型转换为char类型

char update_sql[255];   
sprintf_s(update_sql, "update logininfo set password = %s where name = %s", s1.data(),s2.data());

转完以后sprintf_s函数是可以了,但是sprintf_s的结果update_sql
数据库不识别了,我调试过了,sprintf_s成功把s1s2的值传进去了

mysql_query(&ceshi, update_sql);

编译器执行mysql_query语句返回错误,
是因为update_sql里的password和name的值是char类型的?
以前直接

string sql3 = "update logininfo SET password = '2018'where name='2018'";
mysql_query(sql3);

编译器是能执行成功的,
想用sprintf成功设置update语句的string类型的参数
求大神指教!自己弄了一上午了,很难受

2个回答

会不会是少个引号的问题?

需要在%s那添加单引号

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++ Sprintf_s函数补全缺省内容
我数据库里面的字段类型是varchar,现在有name和password两个字段 现在要update_ 比如 ``` update logininfo set password = '222' where name='111'; ``` 用sprintf_s可以动态设置password和name的值 ![图片说明](https://img-ask.csdn.net/upload/201908/01/1564643451_580543.png) C语言里,%s是C风格的字符串,不是string吧, 所以我用string.data函数把string类型转换为char类型 ``` char update_sql[255]; sprintf_s(update_sql, "update logininfo set password = %s where name = %s", s1.data(),s2.data()); ``` 转完以后sprintf_s函数是可以了,但是sprintf_s的结果update_sql 数据库不识别了,我调试过了,sprintf_s成功把s1s2的值传进去了 ``` mysql_query(&ceshi, update_sql); ``` 编译器执行mysql_query语句返回错误, 是因为update_sql里的password和name的值是char类型的? 以前直接 ``` string sql3 = "update logininfo SET password = '2018'where name='2018'"; mysql_query(sql3); ``` 编译器是能执行成功的, 想用sprintf成功设置update语句的string类型的参数 求大神指教!自己弄了一上午了,很难受
c++字符集相关,sprintf_s 工作方式
sprintf_s 是如何进行格式化字符串检查的? 在网上看见的例子: iRt = sprintf_s(szA, 8, "%s", L"和平"); // 乱码,四个字节 iRt = sprintf_s(szA, 8, "%s", "和平"); // 和平 iRt = sprintf_s(szA, 8, "%S", L"和平"); // 零字节 -1 iRt = sprintf_s(szA, 8, "%S", "和平"); // 零字节 -1 能不能从sprintf_s函数本事检查方式及字符集方面给讲解下?尤其是倒数第二个。
sprintf_s 未定义问题
VSCode 出现未识别的标识符 sprintf_s 已经包含了stdio但还是不行 网上说是不是基本库的东西 那么我该怎么解决?
Qt中sprintf_s函数的问题
如题,以下两个图是 VC和QT的测试图,求大神解答一下 ![图片说明](https://img-ask.csdn.net/upload/201807/27/1532684356_540939.png)![图片说明](https://img-ask.csdn.net/upload/201807/27/1532684369_76895.png)
sprintf_s 问题,求助
组装一条mysql语句: sprintf_s(strSql, "INSERT INTO twifibox_runninglogs VALUES (NULL,'%u', '%s', FROM_UNIXTIME('%u'), '%.1f', '%.1f', '%d', '%d', NULL)\r\n", DeviceId, RoomID, time(NULL), (float)pTh->s16CurRoomTemp/10, (float)pTh->s16TrgRoomTemp/10, pTh->u8WarmState, pTh->WorkMode); 日志打印: INSERT INTO twifibox_runninglogs VALUES (NULL,'589923834', '232985fa', FROM_UNIXTIME('1439538081'), '0.0', '0.0', '1077215232', '0', NULL) FROM_UNIXTIME('%u') 后面的全部错误,调试跟踪了: pTh->s16CurRoomTemp = 252 pTh->s16TrgRoomTemp = 350 pTh->u8WarmState = 0 pTh->WorkMode = 1 看了很多遍,没发现有不妥的地方,参数都对齐了,求帮助 time(NULL) 不能直接用,得先用临时值保存?或者%u的格式用错了? 但是其他地方同样的用法又没出错
Windows C++ 简单的奇葩问题 sprintf_s急急急急急急!!!!!
sprintf_s 总是错误 虽然没有报错 如下 sprintf_s(http_header,BUFF_SIZE,http_res_hdr_tmp1,p_file_len,type); --这是我的代码 成员变量:1,char http_header[BUFF_SIZE] = { 0 }; 2,#define BUFF_SIZE 10240 3,char *http_res_hdr_tmp1="HTTP/1.1 200 OK \r\nServer:Jiangwei's Server<0.1>\r\n" "Accept-Ranges:bytes\r\nContent-Length:%d\r\nConnection:close\r\n" "Content-Type:%s\r\n\r\n"; 4,p_file_len = strlen(Html2); 值是64 5 , char* type = "html"; 可是我调试的结果执行到下一步的时候 http_header的值变成了“弱?”也就是乱码,实在是不明白 在线等大神解答 急急急急急急!!!!!
error C2065: 'sprintf_s' : undeclared identifier
// WIN35.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "resource.h" BOOL CALLBACK NieaProc( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { char s[256]; sprintf_s(s,"uMsg=%d,wParam=%d,lParam=%d\n",uMsg,wParam,lParam); OutputDebugString(s); return FALSE; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance,(LPCSTR)IDD_DIALOG1,NULL,NieaProc); return 0; }
源程序中使用GDI+时出现无法解析的外部指令,求大佬解答
1>------ 已启动生成: 项目: DecCallBack_Demo, 配置: Debug x64 ------ 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(368,5): warning MSB8004: Output Directory does not end with a trailing slash. This build instance will add the slash as it is required to allow proper evaluation of the Output Directory. 1> DecCallBack_DemoDlg.cpp 1>DecCallBack_DemoDlg.cpp(374): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(1769): note: 参见“sprintf”的声明 1>DecCallBack_DemoDlg.cpp(375): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\string.h(346): note: 参见“strncpy”的声明 1>DecCallBack_DemoDlg.cpp(376): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\string.h(346): note: 参见“strncpy”的声明 1>DecCallBack_DemoDlg.cpp(518): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(1769): note: 参见“sprintf”的声明 1>DecCallBack_DemoDlg.cpp(519): warning 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> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(205): note: 参见“fopen”的声明 1>DecCallBack_DemoDlg.obj : error LNK2019: 无法解析的外部符号 GdiplusStartup,该符号在函数 "protected: virtual int __cdecl CDecCallBack_DemoDlg::OnInitDialog(void)" (?OnInitDialog@CDecCallBack_DemoDlg@@MEAAHXZ) 中被引用 1>gdiplus.lib : warning LNK4272: 库计算机类型“X86”与目标计算机类型“x64”冲突 1>bin/DecCallBack_Demo.exe : fatal error LNK1120: 1 个无法解析的外部命令 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
cocos2dx 打包和闪退问题
cocos2d:3.16 SDK:27 NDK: r14b 调用了sprintf_s 函数 windows下面使用正常 打包会出现sprintf_s未声明问题 然后用了C++的string windows正常 真机下闪退 之后调用了一下自己写的函数 其中只有一些字符数组的赋值以及循环语句,没有用到什么特殊的变量类型和函数 但是真机下面依旧闪退 编译指令是cocos compile -p android --ap android-27 总结了一下,出问题的原因貌似是我用了一下C/C++的东西,而它打包的时候或者打包好的包是没有这些东西的。 疑问就是 如果我要使用C/C++的函数和变量类型,我是不是要做一些额外操作?用cocos的命令行打包的话是不是只有cocos的东西?如果我想要使用C++的函数和变量类型这些的话,我得怎么做?或者说正规流程就是只使用cocos的这些就可以了,我不能去使用其他的?
C++ string类里面有类似C语言里sscanf和sprintf的函数吗?
C++ string类里面有类似C语言里sscanf和sprintf的函数可以用吗?或者怎么简易实现从string类读入或输出字符、字符串、整型数等等。最好是库函数,有详细举例,不要太复杂。
SetDlgItemText函数怎么显示浮点数
sprintf_s(szBuffer, "%f", 3.1415); SetDlgItemText(hwnd, IDC_AMP1, (LPCWSTR)szBuffer); 这样显示出来是乱码求正解 。
关于heapfree 堆释放的问题
``` p = (LPSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 12); //p = "123456789"; //strcat_s(p,10,"123456789"); ZeroMemory( p, 12 ); sprintf_s(p,12,"a:%s","123456789"); printf("**%s***\n",p); HeapFree(GetProcessHeap(),0,p); ``` p为全局LPSTR变量 sprintf_s(p,12,"a:%s","123456789"); 这一行12改成1024 heapfree为什么会出错
c++动态参数函数中使用引用问题
void fun(char* ftm, ...) { int temp = 10; va_list va; char* s1 = va_start(va,ftm); // 怎样为引用赋值? char outNum[_INTSIZEOF(int)]; sprintf_s(outNum, "%d", 10); memcpy((char*)va, outNum, _INTSIZEOF(int)); //*((int *)((va += _INTSIZEOF(int)) - _INTSIZEOF(int))) = temp; va_end(va); } void main() { int iNum = 0; fun("", &iNum); // 希望打印出10 printf("%d\n", iNum); }
c sprintf函数第一个参数可以使动态数组吗?
string str="1234.56"; char *ch = new char[str.length()+1]; double tude = atof(str.c_str()); sprintf(ch, "%.5f", tude); 这样格式化double的变量,在内存的读取上存在问题吗?
利用Libnet开发包构造DNS响应报文?
1.有没有大佬会用Libnet网络开发包构造DNS响应报文啊??求助 现在在DNS响应报文的负载部分没搞懂,想填充回答部分的时候,用Wireshark抓到的包总显示格式错误。 ![图片说明](https://img-ask.csdn.net/upload/201912/25/1577263973_226861.png) 下面是我自己写的构造响应报文的代码: #include "libnet.h" #include "./libnet/libnet-functions.h" #include "/usr/local/include/libnet/libnet-functions.h" int main(int argc, char *argv[]) { char payload1[512]=""; int payload_s1=0; char payload2[512]=""; int payload_s2=0; char payload[512]=""; int payload_s=0; // char payload[1024]=""; // int payload_s=0; char err_buf[100] = ""; libnet_t *lib_net=NULL;//声明一个lib_net句柄 char query[]="www.baidu.com"; char answer[]="172.18.246.34"; libnet_ptag_t dns=0;//协议标记 libnet_ptag_t udp=0;//协议标记 libnet_ptag_t ip=0;//协议标记 libnet_ptag_t ethernet=0;//协议标记 unsigned char src_mac[6] = {0xf8,0xe9,0x03,0xb7,0xee,0x40}; unsigned char dst_mac[6] = {0x4c,0x34,0x88,0xda,0xb3,0x0d}; char *src_ip_str = "192.168.0.1"; //源主机IP地址 char *dst_ip_str = "192.168.0.108"; //目的主机IP地址 unsigned long src_ip,dst_ip = 0; // payload_s = sprintf(payload, "%s", "this is for the test"); payload_s1 = snprintf(payload1, sizeof payload1, "%c%s%c%c%c%c%c", (char)(strlen(query)&0xff), query, 0x00, 0x00, 0x01, 0x00, 0x01); payload_s2 = snprintf(payload2, sizeof payload2, "%c%s%c%c%c%c%c%c%c%s", (char)(strlen(query)&0xff), query, 0x00, 0x00, 0x01, 0x00, 0x01,0x00,(char)(strlen(answer)&0xff),answer); strcat(payload,payload1); strcat(payload,payload2), payload_s=payload_s1+payload_s2; // payload_s = snprintf(payload, sizeof payload, "%c%s%c%c%c%c%c", // (char)(strlen(query)&0xff), query, 0x00, 0x00, 0x01, 0x00, 0x01); lib_net = libnet_init(LIBNET_LINK_ADV, "eth1", err_buf); //初始化,返回一个libnet的句柄! if(NULL == lib_net) { perror("libnet_init"); exit(-1); } src_ip = libnet_name2addr4(lib_net,src_ip_str,LIBNET_RESOLVE); //将字符串类型的ip转换为顺序网络字节流 dst_ip = libnet_name2addr4(lib_net,dst_ip_str,LIBNET_RESOLVE); dns=libnet_build_dnsv4( 12, 0xe62e, 0x8180, 1, 1, 0, 0, payload, payload_s, lib_net, dns ); udp= libnet_build_udp( //构造udp数据包 53, 8080, 8+12+payload_s, 0, NULL, 0, lib_net, udp ); ip= libnet_build_ipv4( //构造ip数据包 20+8+12+payload_s, 0, 500, 0, 10, 17, 0, src_ip, dst_ip, NULL, 0, lib_net, ip ); ethernet= libnet_build_ethernet( //构造以太网数据包 (u_int8_t *)dst_mac, (u_int8_t *)src_mac, 0x800, NULL, 0, lib_net, ethernet ); int res = 0; res = libnet_write(lib_net); //发送数据包 if(res ==-1) { perror("libnet_write"); exit(-1); } libnet_destroy(lib_net); //销毁资源 printf("----ok-----\n"); return 0; }
编程时的一个Error,望指教,谢谢
我用 Visual Stdio 2013 编写C程序 出现下面这个错误: 错误 1 error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 最后我在程序前加上一句“ #define _CRT_SECURE_NO_WARNINGS "就消去错误,能解释一下吗? 我不懂。。。
vc程序搬运vs2012出现问题
void playSound(int s_sort) { char ss_sort[20]={0}; ::sprintf_s(ss_sort,"./music/clear%d.wav",s_sort); PlaySound(ss_sort,NULL,SND_ASYNC); } error C2664: “PlaySoundW”: 不能将参数 1 从“char [20]”转换为“LPCWSTR” 应该怎么转换呢
有关C++生成dll遇到的问题,具体如下,希望大家帮小弟解答疑惑.
![图片说明](https://img-ask.csdn.net/upload/201710/18/1508288445_650267.png) 我在项目属性里面找不到这个东西,不知道为什么会出来这个东西,我把两个.ccp文件的方法合并在一起然后改错误,把fopen换成了fopen_s,sprintf使用了sprintf_s来代替 把BUG都解决了就这样了
迷宫问题的代码看不懂了,求大佬注释
为啥要这么定义pos?都没怎么看懂,,,和普通01迷宫有点差别,,生成全联通迷宫找最短路径,,求大佬注释55 ``` #include "pch.h"// pch.cpp: 与预编译标头对应的源文件;编译成功所必需的 #define INT_N 999 #define MAX_DIS 2147483647 using namespace std;//using声明,使程序可以使用程序包含的任何标准C++头文件中的所有名字 Node::Node() { } Node::~Node()//析构函数 { } int Graph::findEdge(int node)//找所有节点边的位置 { int pos = node / N * (N - 1) + node % N;//定义一个节点的行值 int e = 0; if (node%N == 0)//无左邻居 { if (row[pos]) e |= Right;//就向右插边 } else if (node%N == N - 1)//无右邻 { if (row[pos - 1]) e |= Left;//就向左插边 } else { if (row[pos]) e |= Right; if (row[pos - 1]) e |= Left; } int p2 = (node%N)*(N - 1) + node / N;//定义节点的列值 if (node < N) { //无上邻居 if (col[p2]) e |= Down;//可以向下插边 } else if (node >= N * (N - 1)) { //无下邻 if (col[p2 - 1]) e |= Up;//可以向上插边 } else { if (col[p2]) e |= Down; if (col[p2 - 1]) e |= Up; } return e;//返回节点的边,存在e里,得到所有边的位置 } void Graph::make_rand(int * a) { int p = rand() % 4; int q = rand() % 4; if (p != q) { int n = a[p]; a[p] = a[q]; a[q] = n; } } int Graph::findNode(int node, int Direction) { if (Direction & Left) { if (node%N != 0) return node - 1; else return -1; } else if (Direction & Right) { if (node%N == N - 1) return -1; else return node + 1; } else if (Direction &Up) { node = node - N; if (node < 0) return -1; return node; } else if (Direction & Down) { node = node + N; if (node > N*N - 1) return -1; return node; } return -1; } int Graph::findNode2(int node, int Direction) { int pos = node / N * (N - 1) + node % N; int pos2 = (node%N)*(N - 1) + node / N; if (Direction & Left) { if (node%N != 0 && row[pos - 1]) return node - 1; else return -1; } else if (Direction & Right) { if (node%N != (N - 1) && row[pos]) return node + 1; else return -1; } else if (Direction &Up) { node = node - N; if (node >= 0 && col[pos2 - 1]) return node; return -1; } else if (Direction & Down) { node = node + N; if (node > N*N - 1) return -1; if (col[pos2]) return node; return -1; } return -1; } void Graph::addEdge(int node, int Direction) { if (Direction & Left || Direction & Right) { //左右方向-- int pos = node / N * (N - 1) + node % N; if ((Direction & Left) && node%N != 0) row[pos - 1] = true; if ((Direction & Right) && node%N != N - 1) row[pos] = true; } if (Direction & Up || Direction & Down) { //上下方向-- int p2 = (node%N)*(N - 1) + node / N; if ((Direction & Down) && node < N*(N - 1)) col[p2] = true; if ((Direction &Up) && node > (N - 1)) col[p2 - 1] = true; } } void Graph::insertEdge(int from) { //从from起 插入条边 bool add = false; for (int start = from; start < 2 * N*(N - 1); start++) { int pos = 0; int r = start / (2 * N - 1); int c = start % (2 * N - 1); if (c > N - 1) { //列 pos = (c - (N - 1))*(N - 1) + r; if (col[pos] == false) { col[pos] = true; //add = true; return; } } else { //行 pos = r * (N - 1) + c; if (row[pos] == false) { row[pos] = true; return; } } } for (int start = from; start >= 0; start--) { int pos = 0; int r = start / (2 * N - 1); int c = start % (2 * N - 1); if (c > N - 1) { //列 pos = (c - (N - 1))*(N - 1) + r; if (col[pos] == false) { col[pos] = true; //add = true; return; } } else { //行 pos = r * (N - 1) + c; if (row[pos] == false) { row[pos] = true; return; } } } } void Graph::test(int node) { int e = findEdge(node); printf("node=%d,Up=%d,Down=%d,Left=%d,Right=%d", node, e&Up, e&Down, e&Left, e&Right); } Graph::Graph(int n) { N = n; if (N < 2) N = 2; row = new bool[N*(N - 1)]; col = new bool[N*(N - 1)]; } Graph::~Graph() { delete col; delete row; } bool Graph::travel(int start, vector<int> & visit, bool * have) { int count = N * N; int order[4] = { Left,Right,Up,Down }; int c = 0; int node2 = 0; while (visit.size() < count) { if (c == 0) { c = 1; } else start = visit.back(); //随机找一个方向开始-- make_rand(order); bool insert = false; for (int j = 0; j < 4; j++) { node2 = findNode(start, order[j]); if (node2 >= 0 && have[node2] == false) { visit.push_back(node2); have[node2] = true; addEdge(start, order[j]);//添加这个方向的边 insert = true; break; } } if (insert == false) return false; } return true; } void Graph::create() { srand((unsigned)time(NULL)); int total = N * N; bool * have = new bool[total]; int i = 0; for (i = 0; i < total; i++) have[i] = false; for (i = 0; i < N*(N - 1); i++) { row[i] = false; col[i] = false; } vector<int> visit;//已访问的节点表 vector<int> starts;//起点表 int start = rand() % total; visit.insert(visit.end(), start); have[start] = true; starts.push_back(start); bool ok = travel(start, visit, have); while (ok == false) { start = visit[rand() % visit.size()]; int nRet = std::count(starts.begin(), starts.end(), start); if (nRet > 0) { for (int j = 0; j < visit.size(); j++) { start = visit[j]; nRet = std::count(starts.begin(), starts.end(), start); if (nRet == 0) break; } } ok = travel(start, visit, have); starts.push_back(start); } //随机 添加一部分边-- int max = 2 * N * (N - 1); int min = N * N - 1; int need = (max + min) / 2; for (int k = min; k <= need; k++) { //--暂时留空-- int edge = rand() % max;//随机增加的边 //随机找一个起点,增加一个边 insertEdge(edge); } delete have; } void Graph::print() { int i, pos, pos2; char buf[300]; char buf2[300]; char buf3[10]; int max = N * N - 1; sprintf_s(buf3, "%d", max); int len = strlen(buf3); memset(buf3, 0, 10); for (i = 0; i < N*N; i++) { if (i%N == 0) { if (i > 0) { printf("%s\n", buf); printf("%s\n", buf2); } memset(buf, 0, 300); memset(buf2, 0, 300); memset(buf3, 0, 10); } if (len == 1) sprintf_s(buf3, "%d", i); else if (len == 2) sprintf_s(buf3, "%02d", i); else if (len == 3) sprintf_s(buf3, "%03d", i); else if (len == 4) sprintf_s(buf3, "%04d", i); else { printf("too big"); return; } strcat_s(buf, buf3); pos = i / N * (N - 1) + i % N;//(N-1); if (i%N != (N - 1)) { if (row[pos]) strcat_s(buf, "-"); else strcat_s(buf, " "); } pos2 = (i%N)*(N - 1) + i / N; if (i < N*(N - 1)) { if (col[pos2]) { if (len == 1) strcat_s(buf2, "| "); else if (len == 2) strcat_s(buf2, " | "); else if (len == 3) strcat_s(buf2, " | "); else if (len == 4) strcat_s(buf2, " | "); } else { if (len == 1) strcat_s(buf2, " "); else if (len == 2) strcat_s(buf2, " "); else if (len == 3) strcat_s(buf2, " "); else if (len == 4) strcat_s(buf2, " "); } } } printf("%s\n", buf); printf("%s\n", buf2); } void Graph::print2() { int i, pos, pos2; char buf[300]; char buf2[300]; char buf3[10]; int max = N * N - 1; sprintf_s(buf3, "%d", max); int len = strlen(buf3); memset(buf3, 0, 10); for (i = 0; i < N*N; i++) { if (i%N == 0) { if (i > 0) { printf("%s\n", buf); printf("%s\n", buf2); } memset(buf, 0, 300); memset(buf2, 0, 300); memset(buf3, 0, 10); } if (len == 1) sprintf_s(buf3, "%d", i); else if (len == 2) sprintf_s(buf3, "%02d", i); else if (len == 3) sprintf_s(buf3, "%03d", i); else if (len == 4) sprintf_s(buf3, "%04d", i); else { printf("too big"); return; } strcat_s(buf, buf3); pos = i / N * (N - 1) + i % N;//(N-1); if (i%N != (N - 1)) { if (row[pos]) strcat_s(buf, "--"); else strcat_s(buf, " "); } pos2 = (i%N)*(N - 1) + i / N; if (i < N*(N - 1)) { if (col[pos2]) { if (len == 1) strcat_s(buf2, "| "); else if (len == 2) strcat_s(buf2, " | "); else if (len == 3) strcat_s(buf2, " | "); else if (len == 4) strcat_s(buf2, " | "); } else { if (len == 1) strcat_s(buf2, " "); else if (len == 2) strcat_s(buf2, " "); else if (len == 3) strcat_s(buf2, " "); else if (len == 4) strcat_s(buf2, " "); } } } printf("%s\n", buf); printf("%s\n", buf2); } int Graph::edgeCount() { int edge = 0; int Count = N * (N - 1); for (int i = 0; i < Count; i++) { if (row[i]) edge++; if (col[i]) edge++; } return edge; } void Graph::path(int st, int en) { if (st == en) { printf("%d %d", st, en); return; } stack<int> nodes; stack<int> edges; int Direction[4] = { Left,Up,Right,Down }; bool * visited = new bool[N*N]; int i = 0; for (i = 0; i < N*N; i++) visited[i] = false; nodes.push(st); edges.push(-1); visited[st] = true; //visit.push(st); while (nodes.empty() == false) { int n = nodes.top(); int dir = edges.top(); int n2 = -1; while (dir < 3 && n2 < 0) {//dir={-1,0,1,2}=>{0,1,2,3} dir++; n2 = findNode2(n, Direction[dir]); //是否可通-- if (n2 >= 0) { if (visited[n2]) n2 = -1; else break; } } if (n2 < 0) { visited[n] = false;//退出该节点了 nodes.pop(); edges.pop(); } else { edges.pop(); edges.push(dir); if (n2 == en) { //找到了-- //stack<int> print = nodes; nodes.push(n2); print_stack(nodes); nodes.pop(); int dir2 = edges.top(); if (dir2 == 3) { //退栈-- int n3 = nodes.top(); nodes.pop(); edges.pop(); visited[n3] = false; } } else { nodes.push(n2); edges.push(-1); visited[n2] = true; } } } delete visited; } void Graph::shortpath(int st, int en) { if (st == en) { printf("%d %d", st, en); return; } vector< stack<int> > pathes;//所有的路径 int path_len = N * N + 1;//路径长度,最大 stack<int> nodes; stack<int> edges; int Direction[4] = { Left,Up,Right,Down }; bool * visited = new bool[N*N]; int i = 0; for (i = 0; i < N*N; i++) visited[i] = false; nodes.push(st); edges.push(-1); visited[st] = true; //visit.push(st); while (nodes.empty() == false) { //判断当前路径是否超出了最短路径--- if (nodes.size() > path_len) { int n3 = nodes.top(); visited[n3] = false; nodes.pop(); edges.pop(); continue; } int n = nodes.top(); int dir = edges.top(); int n2 = -1; while (dir < 3 && n2 < 0) {//dir={-1,0,1,2}=>{0,1,2,3} dir++; n2 = findNode2(n, Direction[dir]); //是否可通-- if (n2 >= 0) { if (visited[n2]) n2 = -1; else break; } } if (n2 < 0) { visited[n] = false;//退出该节点了 nodes.pop(); edges.pop(); } else { edges.pop(); edges.push(dir); if (n2 == en) { //找到了-- //stack<int> print = nodes; nodes.push(n2); if (nodes.size() < path_len) { pathes.clear(); pathes.push_back(nodes); path_len = nodes.size(); } else if (nodes.size() == path_len) { pathes.push_back(nodes); } printf("path_len=%d\n", path_len); nodes.pop(); int dir2 = edges.top(); if (dir2 == 3) { //退栈-- int n3 = nodes.top(); nodes.pop(); edges.pop(); visited[n3] = false; } } else { nodes.push(n2); edges.push(-1); visited[n2] = true; } } } delete visited; print_pathes(pathes);//输出所有的路径 } void Graph::print_stack(stack<int> nodes) { vector<int> list; while (nodes.empty() == false) { list.insert(list.begin(), nodes.top()); nodes.pop(); } bool first = true; for (auto val : list) { if (first) printf("%d", val); else printf(" %d", val); first = false; } printf("\n"); } void Graph::print_stack2(stack<int> path) { bool first = true; while (path.empty() == false) { if (first) printf("%d", path.top()); else printf(" %d", path.top()); first = false; path.pop(); } printf("\n"); } void Graph::print_pathes(vector<stack<int>> pathes) { for (auto val : pathes) { print_stack(val); //printf("\n"); } } void Graph::dfs_start() { stack<int> path; bool * visited = new bool[N*N]; for (int i = 0; i < N*N; i++) visited[i] = false; dfs(visited, path, 0); print_stack(path); delete visited; } void Graph::dfs(bool * visited, stack<int>& path, int v) { int Direction[4] = { Left,Up,Right,Down }; visited[v] = true; path.push(v); for (int i = 0; i < 4; i++) { int n = findNode2(v, Direction[i]); if (n >= 0 && visited[n] == false) { dfs(visited, path, n); } } } void Graph::shortpath2(int from, int to) { if (from < 0 || from >= N * N || to < 0 || to >= N * N) { printf("输入错误。\n"); return; } if (from == to) { printf("%d %d\n", from, to); return; } vector<Node> nodes;//节点次序 nodes.resize(N*N);// reserve(N*N); vector<int> S, U; //U.resize(N*N);// reserve(N*N); int i = 0; for (i = 0; i < N*N; i++) { //将所有的节点-按次序存入nodes nodes[i].id = i; nodes[i].dis = Juli(from, i); if (nodes[i].dis == 1) {//记下前驱节点 nodes[i].prev.push_back(from); } if (i != from) U.push_back(i);//其他节点存入U中 } int sindex = 0; S.push_back(from); //--开始计算过程 while (U.empty() == false) { vector<int> nodelist;//节点编号表,具体情况查nodes //int size = S.size(); for (; sindex < S.size(); sindex++) { //查找u中,距离S[index]最近的节点,形成节点表 int d = MAX_DIS; for (int u : U) { if (contains(nodes[u].prev, S[sindex])) {//前驱节点是s[i] if (nodes[u].dis < d) { nodelist.clear(); nodelist.push_back(u); d = nodes[u].dis; } else if (nodes[u].dis == d && d != MAX_DIS) { nodelist.push_back(u);//同样距离的点 } } } //将nodelist的值加入到S中,并从U中去掉 for (int n : nodelist) { S.push_back(n); U.erase(std::remove(std::begin(U), std::end(U), n), std::end(U)); } //--用nodelist的值更新-nodes中的距离和前驱 for (int n : nodelist) { // //若-以n为中间节点距离更短,则将nodes中的当前节点的前驱修改为n for (int u : U) { int d = Juli(n, u);//计算两点间的距离 if (d != MAX_DIS) { if (nodes[n].dis + d < nodes[u].dis) { nodes[u].prev.clear(); nodes[u].prev.push_back(n);//以n为前驱 nodes[u].dis = nodes[n].dis + d; } else if (nodes[n].dis + d == nodes[u].dis) { //同样距离的点 nodes[u].prev.push_back(n); } } } } nodelist.clear(); } } //遍历nodes,输出所有的路径-- allpath(from, to, nodes); } int Graph::Juli(int from, int to) { if (from == to) return 0; if (findNode2(from, Left) == to) return 1; if (findNode2(from, Up) == to) return 1; if (findNode2(from, Right) == to) return 1; if (findNode2(from, Down) == to) return 1; return MAX_DIS; } bool Graph::contains(vector<int> vec, int val) { int nRet = count(vec.begin(), vec.end(), val); return nRet > 0; } void Graph::allpath(int from, int to, vector<Node>& nodes) { stack<int> path; allpath_dfs(path, to, nodes, from); } void Graph::allpath_dfs(stack<int>& path, int to, vector<Node>& nodes, int src) { path.push(to); if (to == src) { print_stack2(path); path.pop(); return; } vector<int> prevlist = nodes[to].prev;//前驱节点 for (int v : prevlist) { allpath_dfs(path, v, nodes, src); } path.pop(); } int main() { int N = 2; printf("输入边的大小 N="); scanf_s("%d", &N); Graph g(N); g.create();//生成迷宫 g.print();//输出迷宫 printf("\nedge count=%d\n", g.edgeCount());//迷宫现有的边数 /* g.test(0); g.test(4); g.test(10); */ g.dfs_start();//深度优先遍历,证明迷宫的连通性 int from=0, to=0; printf("输入起点:"); scanf_s("%d", &from); printf("输入终点:"); scanf_s("%d", &to); printf("计算从%d到%d的最短路径有:\n",from,to); return 0; } ```
Linux系统中的音乐播放器
用的是centos7,GCC编译后就没反应了怎么回事?![图片说明](https://img-ask.csdn.net/upload/201912/25/1577263309_616211.png) ``` #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <dirent.h> #include <signal.h> #include <sys/wait.h> #include <time.h> #include <sys/ptrace.h> char * song[100];//指向歌名的指针数组 char song_buf[100];//存放将要播放的歌的歌名 char cmd_buf[100];//存放命令 int name[100];//存放播放过的歌曲名字,最多保存100首 int all = 0;//歌曲总数 int i;// int com=0;//当前歌 int flag=1;//默认列表播放 0为随机播放 1为列表播放 2为随机播放 int n; int a; void findmusic(void);//查找mp3文件 void getname(void);//获取mp3文件名字 void play_singlecircle_music1(int);//单曲循环 void play_listcircle_music1(int);//列表循环 void play_random_music(int);//随机播放 void last_music(int a);//上一首歌 void next_music(int a);//下一首歌 void text(void);//测试是否正在播放歌曲 void savename(void);//保存歌曲 void Name(void);//播放歌曲超过100时丢掉保存的第一首歌 int m=48;//0的ASCII值为48 void savename(void) { if(n<100){name[n++]=com;//将当前歌存放在数组里 } else Name();//当超过100首歌时,丢弃掉数组里存放的第一首歌 } void fun(int a)//父子进程成功通讯测试函数 { printf("父子进程通讯成功!\n"); } /*用ps -ef | grep -w madplay | grep -v grep | wc -l终端命令来测试是否madplay正在运行,如果运行,执行结果为1,否则为0*/ void text(void) { FILE *fp; FILE *fp2; char buf[15] ={"it's finish!"};//在这里随便定义了一个buf,反正最后只是用来承接终端命令返回值,并且只有第0位用的到 memset(buf,'\0',10); fp = popen("ps -ef | grep -w madplay |grep -v grep |wc -l ","r");//使用FIFO管道执行外部程序,获得的返回值用fread读 fread(buf,1,1,fp); pclose(fp); m=(int)buf[0];//这里获得的0和1为ASCII值 } int main(void) { int ch; int flag=0; getname();//获取当前目录下的mp3文件 pid_t pid=fork(); if(pid<0) { perror("fork"); return -1; } else if(pid==0) { signal(20,fun);//测试 signal(4,play_singlecircle_music1);//使用信号4当作单曲循环信号,觉得可以用,但是会不会影响性能并不清楚,下同 signal(5,play_listcircle_music1); signal(6,play_random_music); signal(7,last_music); signal(8,next_music); while(1);//不让子进程直接执行完毕,等待父进程的信号 } else{ printf("共找到以上本地MP3文件:\n"); sleep(2); kill(pid,20);//测试父子进程通讯 y: printf("*********************************\n");//菜单 printf(" 按1暂停播放 \n"); printf(" 按2继续播放 \n"); printf(" 按3单曲循环 \n"); printf(" 按4列表循环 \n"); printf(" 按5随机播放 \n"); printf(" 按6上一首歌 \n"); printf(" 按7下一首歌 \n"); printf(" 按0退出系统 \n"); printf("*********************************\n"); while(1) { z: printf("请输入你需要进行的操作\n"); scanf("%d",&ch); if(ch<0&&ch>7) {printf("输入有误!\n");goto z;} switch (ch) { case 1:printf("暂停\n"); sprintf(cmd_buf,"killall -SIGSTOP madplay");system(cmd_buf);break;//暂停,给madplay发送暂停信号 case 2:printf("播放\n"); sprintf(cmd_buf,"killall -SIGCONT madplay");system(cmd_buf);break;//播放 case 3:printf("单曲循环\n"); kill(pid,4);break;//单曲循环,给子进程发送信号,进入相应的服务函数 case 4:printf("列表循环\n"); kill(pid,5);break;//列表循环 case 5:printf("随机播放\n"); kill(pid,6);break;//随机播放 case 6: kill(pid,7);break;//上一首 case 7: kill(pid,8);break;//下一首 case 0: kill(pid,9);//关闭全部进程 sprintf(song_buf,"killall -9 madplay"); system(song_buf); raise(9); break; default :break; } goto y; }} wait(NULL); return 0; } void next_music(int a) { sprintf(song_buf,"killall -9 madplay"); system(song_buf); switch(flag) { case 0: savename(); text(); if(m!=48)//如果当前正在播放歌曲,则杀死madplay进程 {sprintf(song_buf,"killall -9 madplay"); system(song_buf);} printf("n = %d\n",n); sprintf(song_buf,"madplay -o wav:- /root/System_project/mp3/ %s 2> /dev/null | aplay 2>/dev/null &",song[com]); system(song_buf); raise(4); break; case 1: savename(); printf("n = %d\n",n); if(com==(all-1)) com=-1; com++; text(); if(m!=48) {sprintf(song_buf,"killall -9 madplay"); system(song_buf);} sprintf(song_buf,"madplay -o wav:- /root/System_project/mp3/ %s 2> /dev/null | aplay 2>/dev/null &",song[com]); system(song_buf); raise(5); break; case 2: savename(); printf("n = %d\n",n); srand((int)time(NULL)); int r=rand()%(all); com=r; text(); if(m!=48) {sprintf(song_buf,"killall -9 madplay"); system(song_buf);} sprintf(song_buf,"madplay -o wav:- /root/System_project/mp3/ %s 2> /dev/null | aplay 2>/dev/null &",song[com]); system(song_buf); raise(6); break; } sleep(1); } void last_music(int a) { sprintf(song_buf,"killall -9 madplay"); system(song_buf); if(n<0) { printf("当前已是第一首\n"); n=0; } com=name[n-1]; n--; //printf("n = %d\n",n); //printf("com = %d\n",com); sprintf(song_buf,"madplay -o wav:- /root/System_project/mp3/ %s 2> /dev/null | aplay 2>/dev/null &",song[com]); system(song_buf); sleep(1); if(flag==0) raise(4); else if(flag==1) raise(5); else if(flag==2) raise(6); } void play_random_music(int a) { int r; flag=2; while(1) { text: text(); if(m!=48)//还是madplay进程的问题,每延时3s查询一次是不是正在播放歌曲,总觉得很鸡肋,却又没找到其他的解决办法 {sleep(3); goto text;} repeat: srand((int)time(NULL)); r=rand()%(all); if (r>all-1) { goto repeat;//产生随机数如果大于i,重新获取,一般是不会的 } savename(); //printf("n = %d\n",n); com=r; sprintf(song_buf,"madplay -o wav:- /root/System_project/mp3/ %s 2> /dev/null | aplay 2>/dev/null &",song[com]); system(song_buf); } } void play_listcircle_music1(int a) { flag=1; while(1) { text: text(); if(m!=48) {sleep(3); goto text;} savename(); //printf("n = %d\n",n); com++; if(com>all-1) {com=0;} sprintf(song_buf,"madplay -o wav:- /root/System_project/mp3/ %s 2> /dev/null | aplay 2>/dev/null &",song[com]); system(song_buf); } } void play_singlecircle_music1(int a) { flag=0; while(1) { text: text(); if(m!=48) {sleep(3); goto text;} savename(); //printf("n = %d\n",n); sprintf(song_buf,"madplay -o wav:- /root/System_project/mp3/ %s 2> /dev/null | aplay 2>/dev/null &",song[com]); system(song_buf); } } void Name(void) { int j; for(j=0;j<99;j++) { name[j]=name[j+1]; } n--; } /* 这里使用脚本查询getname函数,脚本文件内容如下 find *.mp3 */ void findmusic(void) { system("./find.sh"); } void getname(void) { int len; int j; static char *buf; DIR *dir; all=0; struct dirent *ptr; dir = opendir(".");//在当前目录下查找MP3歌曲,如果还有其他路径,就把这里改为其他路径 while((ptr = readdir(dir))!=NULL) { len=strlen(ptr->d_name); len=len-4; if((strcmp(ptr->d_name+len,".mp3"))==0)//后四位进行比较,是否为“.mp3” { buf=(char*)malloc(100);//不开辟空间会导致数组里存放的歌曲全为最后一首歌 memset(buf,0,sizeof(buf)); strcat(buf,ptr->d_name); song[all++]=buf; } } for(j=0;j<all;j++) { printf("%s\n",song[j]); } } ```
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问