关于VS2015编译的C++工程的DLL路径问题 10C

我用VS2015编译的一个C++工程用到了一个第三方的动态链接库,但是这个库我下载了两个版本。
我用VS进行调试的时候它调用的是我当前环境变量PATH下的库1,但是我直接在工程的bin->debug目录下打开exe文件,这时候这个exe调用的是我之前设置的环境变量PATH下的库2.
所以我的exe在链接DLL的时候,不是从当前的系统环境变量的PATH里面查找的,而是从某个副本环境变量PATH查找相应的DLL文件么?我尝试过把调用DLL的工程清理重新生成,然后直接运行exe文件,这时候链接的DLL还是上一个PATH路径下的,不是当前的PATH路径下的库1.
请教各位,这个问题是由于什么造成的,exe调用的DLL路径倒是由谁来决定的?虽然,我猜测把DLL跟exe放在一个目录下肯定没有这个问题,但是还是想知道其中的原理,谢谢!

4个回答

exe加载DLL的时候会有一系列的搜索路径

 假如安全DLL搜索模式启用,搜索顺序如下:
1. 应用程序所在的路径
2. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径。
3. 16位系统的目录。并没有函数可以获取这个目录的路径,但是它会被查找。
4. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径。
5. 当前目录
6. PATH环境变量指定的路径。请注意,这并不包括每个应用程序的应用程序路径注册表项中指定。在应用程序路径注册表项的键值并不作为DLL的搜索路径。

谢谢回答!这个搜索顺序我知道,但现在我发现更新了PATH路径之后,在进行VSdebug的时候这个路径更新到了,而在直接运行exe程序的时候使用的路径还是原来的路径。
后来我重启了电脑,然后exe的路径就变成最新的了。所以我怀疑exe使用的路径不是我们看到的系统环境变量的PATH路径,而是这个路径某个备份,每次启动电脑的时候更新什么的。

属性,链接器 常规 输出文件 $(OutDir)\$(ProjectName).exe 这里表示了生成exe的路径和文件名。。。。对于外部调用dll,一定要确保路径的正确。

或者你可以放到系统下。。。

谢谢回答!我的问题在于exe程序和VS2015的本地调试器加载的系统环境变量PATH好像不是一个东西,exe的加载路径重启后才会更新。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于VS2015编译的C++工程的DLL路径问题

我用VS2015编译的一个C++工程用到了一个第三方的动态链接库,但是这个库我下载了两个版本。 我用VS进行调试的时候它调用的是我当前环境变量PATH下的库1,但是我直接在工程的bin->debug目录下打开exe文件,这时候这个exe调用的是我之前设置的环境变量PATH下的库2. 所以我的exe在链接DLL的时候,不是从当前的系统环境变量的PATH里面查找的,而是从某个副本环境变量PATH查找相应的DLL文件么?我尝试过把调用DLL的工程清理重新生成,然后直接运行exe文件,这时候链接的DLL还是上一个PATH路径下的,不是当前的PATH路径下的库1. 请教各位,这个问题是由于什么造成的,exe调用的DLL路径倒是由谁来决定的?虽然,我猜测把DLL跟exe放在一个目录下肯定没有这个问题,但是还是想知道其中的原理,谢谢!

vs2015 编译tesseract-master,leptonica-1.74.1链接错误

最近,由于要做银行卡识别。就研究了下OCR。 我在github上下载了tesseract-master,但用cmake-gui配置时,要求要有leptonica。于是就下载了最新版的leptonica-1.74.1,这个库编译成功,生成leptonica-1.74.1d.dll,leptonica-1.74.1d.lib但是工程里面没有安装子项。然后在用cmake配置时选中Leptonica_DIR,设置路径为leptonica的工程路径(路径下包含leptonicaConfig.cmake,根据cmake提示需要选的),我的路径为图片。这时配置顺利通过。在编译时,编码的错误按网上的解决了,但还有另外的未定义链接错误,但是我到路径下面去看,对应定义的obj文件存在,这是什么问题呀,望大家指点 ![图片说明](https://img-ask.csdn.net/upload/201706/04/1496573893_928384.jpg) ![图片说明](https://img-ask.csdn.net/upload/201706/04/1496573874_879131.jpg)

vs编译POCO找不到mysql.h

vs2015编译最新POCO(win32),在编译Mysql时提示无法找到mysql.h, 本机已安装mysql(32位),根据网上查询到的资料在buildwin.cmd中修改 mysql的路径即可或者直接打开vs进行编译,但是还是出现mysql.h, 1.http://www.voidcn.com/article/p-nunklezp-od.html 2.https://www.bbsmax.com/A/mo5kbZonJw/ 最新版本的POCO中,buildwin.cmd文件已经发生变化,无法直接指定mysqld的路径, https://github.com/pocoproject/poco/issues/2515 这个是将mysql直接安装到源代码路径下,但是我觉得这样并不是一个好的解决办法,官方的文档中没有详细说明,所以询问一下是否可以通过编译时参数进行指定或者修改.

vs2015生成的exe 在别的电脑上了用不了

1. 我在我的电脑上装了visual studio 2015社区版,然后我用它写了一个程序。在自己的电脑上,编译成功,生成debug版的exe成功。但是我发现,只要不在有vs2015的电脑上,就运行不了这个exe,请问为什么? 2. 我试了三台电脑(2个装有vs2013,1个装有vs2010,结果三个电脑都运行不了那个exe,都是提示找不到msvcp140.dll),请问什么是运行库?什么是动态链接库什么是静态链接库他们和运行库有什么关系? 3. 然后我在自己的visual studio 2015里,找到了那个dll,然后我考到我的U盘里,然后按照网上的方法装在那个有visual studio 2010 的指定目录里面然后运行了win+r 然后加一个什么指令(总之就是网上说的修复这个问题的方法),结果错误提示找不到路径之类的。但是再一次运行那个exe的时候,就不会在弹出那个没有dll的错误了,却显示的是无法打开文件 然后给了一个000000000c什么的指令还是内存地址,总之就还是打不开。 这是什么情况? 4.然后我又看网上的方法,说可以使用静态链接。我就找到了vs2015里设置静态链接的地方,选择了MT项,结果却无法生成文件了提示:1>LINK : fatal error LNK1104: 无法打开文件“libcpmtd.lib”请问这又是什么情况? 5.那个平台工具集是什么东西?v140 v130什么的,是不是想要让低版本的电脑用就要用更低的平台工具集? 6.我到底应该怎么做才能,让我在vs2015上生成的exe在普通的电脑上运行????还有上面说的这些知识,有哪方面的书籍可以入门吗?我觉得,解决这些问题太吃力了。大学入门学的编程知识根本没有涉及到过这些东西。 谢谢!

VS MFC静态调用DLL问题

我在Release模式下静态调用的DLL生成.exe后,这个.exe能在其他电脑上运行吗,是否需要什么运行环境? 谢谢指点!

java使用JNI调用的dll依赖于其它dll路径该如何配置

jni调用dll扩展程序直接配置-Djava.library.path来指定dll所在目录即可以加载到dll,但是如果dll要依赖其它dll的时候会提示 Can't find dependent librarie即找不到dll的依赖库,这种情况可以将需要依赖的dll放到项目根目录下或者jdkbin目录下解决,但是想要导出jar包供其它调用就不行了,而且这种解决方法也不适用,总不能每次调用都把dll文件复制到根目录下,这时该如何处理?

使用vs2013编译64位的gdal源码

我从gdal官网下载了gdal222.zip, 解压得到源码放在路径D:\gdal-2.2.2,然后按照网上的指导修改了nmake.opt文件,包括注释行WIN64=YES,GDAL_HOME, MSVC_VER=1700。 然后使用VS2013 x64 本机工具命令提示,输入编译命令。当输入命令nmake /f makefile.vc后,出现fatal error LNK1112:模块计算机类型“x64”与目标计算机类型“x86”冲突。具体错误提示如下图。 请路过的都帮忙看看,该怎么解决呢!? ? ps: 我尝试过将VS的VC路径添加到系统变量path中重启电脑,也没有解决。 ![图片](https://img-ask.csdn.net/upload/201709/26/1506421522_596676.jpg)

VS2010 调用 MATLAB 2014a 编译生成的 DLL,初始化时出错

之前用VS2010 和 MATLAB 2014a 混合编程成功,最近换了台电脑,重新安装了VS2010和2014a的MCR,发现VS2010 调用 MATLAB 2014a 编译生成的 DLL,初始化时出错,j具体情况如图。已经检查了工程属性的各种库路径,网上也没搜到解决方法,请大家帮帮忙!万分感谢!!![![图片说明](https://img-ask.csdn.net/upload/201710/27/1509093216_336300.png)图片说明](https://img-ask.csdn.net/upload/201710/27/1509093210_951648.png)![图片说明](https://img-ask.csdn.net/upload/201710/28/1509153449_90737.png)

vs2015在win7环境下编译wpf 无法运行

我在工作机环境下编译WPF项目,然后也能正常运行,但是当我将发布后的项目拷到另一台未安装VS2015但.net环境为4.6时无法运行,会抛以下异常,但是安装VS2015之后就可以正常运行。 应用程序: ceshi.heping.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止。 异常信息: System.IO.FileNotFoundException 在 Shenghe.Hebao.MainWindow..ctor() 异常信息: System.Windows.Markup.XamlParseException 在 System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri) 在 System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri) 在 System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean) 在 System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext) 在 System.Windows.Application.LoadComponent(System.Uri, Boolean) 在 System.Windows.Application.DoStartup() 在 System.Windows.Application.<.ctor>b__1_0(System.Object) 在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) 在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) 在 System.Windows.Threading.DispatcherOperation.InvokeImpl() 在 System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object) 在 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 在 MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object) 在 System.Windows.Threading.DispatcherOperation.Invoke() 在 System.Windows.Threading.Dispatcher.ProcessQueue() 在 System.Windows.Threading.Dispatcher.WndProcHoo 错误应用程序名称: ceshi.heping.exe,版本: 1.0.0.0,时间戳: 0x5821d354 错误模块名称: KERNELBASE.dll,版本: 6.1.7601.18015,时间戳: 0x50b83c8a 异常代码: 0xe0434352 错误偏移量: 0x0000c41f 错误进程 ID: 0xdfc 错误应用程序启动时间: 0x01d2553c441a0047 错误应用程序路径: C:\Users\Wang\Desktop\ceshi.heping.exe 错误模块路径: C:\Windows\syswow64\KERNELBASE.dll 报告 ID: 820f639f-c12f-11e6-b426-10bf4805993b 我的工作机环境: IDE:VS 2015 Professional 操作系统:win7 编译环境:C#6.0和 .net4.5.2 项目:WPF 运行环境: 操作系统:win7 带 .net 4.6

VS2015 项目属性(debug X64)设置 附加包含目录 ..\不是项目的父目录

问题如题。 截图如下:![图片说明](https://img-ask.csdn.net/upload/201901/18/1547794620_857566.png)

VS2015+Opencv3.4.0配置无GPU下darknet环境编译出错

![图片说明](https://img-ask.csdn.net/upload/202004/07/1586252632_26621.png) 编译darknet-master->build->darknet->darknet_no_gpu.sln文件出现如下错误,已经按照相关教程在包含目录、库目录下修改为自己的opencv安装路径。也是在Release+x64平台下编译的。

VS2013中修改一个工程的工程名和文件夹下的类名,文件名方法

我已经有了一个C++的工程,并且编译成功了。 我想把这个工程作为一个可复用的工程,因为代码需要改动的地方不多。 但是对于文件来说,文件名、工程名、里面的一些类名,方法名之类的是根据工程名取的, 这样有什么好的方法来进行修改,或者说创建一个模板

关于无法编译caffe中libcaffe的问题

caffe+vs2013+cuda7.5+cudnn4.0编译出现问题如下: I:\caffe-master\caffe-master\windows\libcaffe>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env --cl-version 2013 -ccbin "I:\VS2013\VC\bin\x86_amd64" -I"I:\caffe-master\NugetPackages\lmdb-v120-clean.0.9.14.0\build\native\..\..\lib\native\include" -I"I:\caffe-master\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\../..//build/native/include/" -I"I:\caffe-master\NugetPackages\protobuf-v120.2.6.1\build\native\../..//build/native/include/" -I"I:\caffe-master\NugetPackages\glog.0.3.3.0\build\native\../..//build/native/include/" -I"I:\caffe-master\NugetPackages\gflags.2.1.2.1\build\native\../..///build/native/include/" -I"I:\caffe-master\NugetPackages\boost.1.59.0.0\build\native\..\..\lib\native\include\\" -I"I:\caffe-master\NugetPackages\hdf5-v120-complete.1.8.15.2\build\native\..\..\lib\native\include" -I"I:\caffe-master\NugetPackages\OpenBLAS.0.2.14.1\build\native\..\..\lib\native\include" -I"I:\caffe-master\NugetPackages\OpenCV.2.4.10\build\native\../../build/native/include/" -I"I:\caffe-master\caffe-master\windows\libcaffe\\..\..\src\\" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" --keep-dir I:\caffe-master\caffe-master\windows\..\Build\Int\libcaffe\x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -Xcudafe "--diag_suppress=exception_spec_override_incompat --diag_suppress=useless_using_declaration --diag_suppress=field_without_dll_interface" -D_SCL_SECURE_NO_WARNINGS -DGFLAGS_DLL_DECL= -DHAS_LMDB -DHAS_HDF5 -DHAS_OPENBLAS -DHAS_OPENCV -DNDEBUG -D_SCL_SECURE_NO_WARNINGS -DUSE_OPENCV -DUSE_LEVELDB -DUSE_LMDB -DUSE_CUDNN -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W1 /nologo /Ox /Zi /MD " -o I:\caffe-master\caffe-master\windows\..\Build\Int\libcaffe\x64\Release\absval_layer.cu.obj "I:\caffe-master\caffe-master\src\caffe\layers\absval_layer.cu" 1> nvcc fatal : Could not open output file 'C:\Users\huashuo\AppData\Local\Temp;H:\opencv\build\x64\vc10\bin;H:\opencv\build\x86\vc10\bin/tmpxft_000000d4_00000000' 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 7.5.targets(604,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env --cl-version 2013 -ccbin "I:\VS2013\VC\bin\x86_amd64" -I"I:\caffe-master\NugetPackages\lmdb-v120-clean.0.9.14.0\build\native\..\..\lib\native\include" -I"I:\caffe-master\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\../..//build/native/include/" -I"I:\caffe-master\NugetPackages\protobuf-v120.2.6.1\build\native\../..//build/native/include/" -I"I:\caffe-master\NugetPackages\glog.0.3.3.0\build\native\../..//build/native/include/" -I"I:\caffe-master\NugetPackages\gflags.2.1.2.1\build\native\../..///build/native/include/" -I"I:\caffe-master\NugetPackages\boost.1.59.0.0\build\native\..\..\lib\native\include\\" -I"I:\caffe-master\NugetPackages\hdf5-v120-complete.1.8.15.2\build\native\..\..\lib\native\include" -I"I:\caffe-master\NugetPackages\OpenBLAS.0.2.14.1\build\native\..\..\lib\native\include" -I"I:\caffe-master\NugetPackages\OpenCV.2.4.10\build\native\../../build/native/include/" -I"I:\caffe-master\caffe-master\windows\libcaffe\\..\..\src\\" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" --keep-dir I:\caffe-master\caffe-master\windows\..\Build\Int\libcaffe\x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -Xcudafe "--diag_suppress=exception_spec_override_incompat --diag_suppress=useless_using_declaration --diag_suppress=field_without_dll_interface" -D_SCL_SECURE_NO_WARNINGS -DGFLAGS_DLL_DECL= -DHAS_LMDB -DHAS_HDF5 -DHAS_OPENBLAS -DHAS_OPENCV -DNDEBUG -D_SCL_SECURE_NO_WARNINGS -DUSE_OPENCV -DUSE_LEVELDB -DUSE_LMDB -DUSE_CUDNN -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W1 /nologo /Ox /Zi /MD " -o I:\caffe-master\caffe-master\windows\..\Build\Int\libcaffe\x64\Release\absval_layer.cu.obj "I:\caffe-master\caffe-master\src\caffe\layers\absval_layer.cu"”已退出,返回代码为 1。

VS2013 在debug模式下编译没有错误,但使用release模式,就有一堆错误

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include "字符串.h" int main() { Mystring string1; initwithstring(&string1, "xhqld"); printstring(&string1); backaddchar(&string1, 'd'); printstring(&string1); backaddstr(&string1, "forever"); printstring(&string1); char * p = NULL; p = findfirstchar(&string1, 'd'); *p = 'a'; printstring(&string1); char * p1 = mystrstr(string1.p, "ever"); if (p1 != NULL) printf("%c\n", *p1); else printf("not find\n"); printf("--------------\n"); deletechar(&string1, 'a'); printstring(&string1); printf("--------------\n"); deletestring(&string1, "for"); printstring(&string1); printf("--------------\n"); addchar(&string1, 'W', 'e'); printstring(&string1); printf("--------------\n"); addstring(&string1, "lol",'W'); printstring(&string1); system("pause"); return 0; } ``` #include<stdio.h> #include<stdlib.h> struct CString { char * p;//保存字符串的首地址 int length;//字符串长度 }; typedef struct CString Mystring; void init(Mystring * string);//初始化字符串 void initwithlength(Mystring * string, int length); void initwithstring(Mystring *string, char * copystring);// void printstring(Mystring * string);//打印字符串 int mystrlen(char * p);//求字符串长度 char * mystrcpy(char * dest, const char * source);//字符串复制 void backaddchar(Mystring * string, char ch);//尾部增加一个字符 void backaddstr(Mystring * string, char * str);//尾部增加一个字符串 char * findfirstchar(Mystring * string, char ch);//查找第一个匹配字符 char * mystrchr(char * str, char ch);//查找字符 char * mystrstr(char * dest, char * str);//字符串比较函数 int deletechar(Mystring * string, char ch);//删除一个字符 int deletestring(Mystring * string, char * str);//删除一个字符串 void addchar(Mystring * string, char ch, char searchchar);//任意增加字符 void addstring(Mystring * string, char *str, char searchchar);//任意增加字符串 ``` #define _CRT_SECURE_NO_WARNINGS #include"字符串.h" #include<string.h> void init(Mystring * string)//初始化字符串 { string->length = 0; string->p = NULL; } void initwithlength(Mystring * string, int length) { //Mystring * p = (char *)malloc(sizeof(char)*length); Mystring * p = (char *)calloc(length, sizeof(char));//calloc为分配的内存清零,malloc不清零 } void initwithstring(Mystring *string, char * copystring)// { int length = mystrlen(copystring); string->p = (char *)calloc(length + 1, sizeof(char)); mystrcpy(string->p, copystring); string->length = length + 1; } void printstring(Mystring * string)//打印字符串 { printf("%s\n", string->p); } int mystrlen(char * p) { if (p != NULL) { int length = 0; while (*p++ != '\0') length++; return length; } else return -1;//打开失败 } char * mystrcat(char * dest, const char * source) { if (dest == NULL || source == NULL) return NULL; char * pdest = dest; while (*pdest != '\0') pdest++; while (*source != '\0') *pdest++ = *source++; *pdest = '\0'; return dest; } char * mystrcpy(char * dest, const char *source) { if (dest == NULL || source == NULL) return NULL; char * pdest = dest; while (*source != '\0') *pdest++ = *source++; *pdest = '\0'; return dest; } void backaddchar(Mystring * string, char ch)//尾部增加一个字符 { if (mystrlen(string->p) + 2 > string->length)//表达式成立,则表示已满 { string->p = (char *)realloc(string->p, string->length + 2); string->p[string->length - 1] = ch; string->p[string->length] = '\0'; printf("%s\n", string->p); string->length += 2; } else { string->p[mystrlen(string->p)] = ch; string->p[mystrlen(string->p) + 1] = '\0'; } } void backaddstr(Mystring * string, char * str)//尾部增加一个字符串 { if (str != NULL) { if ( mystrlen(string->p) + mystrlen(str) +1 > string->length) { int length = mystrlen(str); string->p = (char *)realloc(string->p, string->length + length + 1); mystrcat(string->p, str); string->p[string->length + length] = '\0'; string->length = string->length + length + 1; } else { mystrcat(string->p, str); string->p[mystrlen(string->p) + mystrlen(str)] = '\0'; } } } char * findfirstchar(Mystring * string,const char ch) { char * p = mystrchr(string->p, ch); return p; } char * mystrchr(char * str, char ch) { if (str != NULL || ch != '\0') { char * pstr = str; while (*pstr != '\0') { if (*pstr == ch) return pstr; pstr++; } return NULL; } } char * mystrstr(char * dest, char * str) { char * pdest = dest; char * pstr = str; int str_length = mystrlen(str); int dest_length = mystrlen(dest); if (str_length <= dest_length) { int flag = 0; int i = 0; while (dest_length - i >= str_length && flag == 0) { if (pdest[i] == pstr[0]) { flag = 1; for (int k = 1; k < str_length && flag == 1; k++) flag = pdest[i + k] == pstr[k] ? 1 : 0; } i++; } return flag == 1 ? &pdest[i - 1] : NULL; /*if (flag == 1) return &pdest[i - 1]; else return NULL;*/ } } int deletechar(Mystring * string, char ch)//删除一个字符 { char * p = mystrchr(string->p, ch); if (p != NULL ) { while (*p != '\0') *p++ = *(p + 1); *--p = '\0'; return 1; } return 0; } int deletestring(Mystring * string, char * str)//删除一个字符串 { char * p = mystrstr(string->p, str);//查找字符串位置 if (p != NULL) { int str_length = mystrlen(str);//计算被查找子串的长度 int string_length = mystrlen(string->p);//计算母串string的长度 char * pend = p + str_length;//pend指向string->p中被查找子串的尾部 while (* pend != '\0')//把被查找子串后面的字符前移,覆盖被查找的子串 *p++ = *pend++; string->p[string_length - str_length] = '\0';//为删除str子串后的string母串设置新的字符串结束符 return 1; } return 0; } void addchar(Mystring * string, char addchar, char searchchar)//任意增加字符 { char * position = mystrchr(string->p, searchchar); if (position != NULL) { int string_length = mystrlen(string->p);//求母串的长度 int position_length = mystrlen(position);//求从插入字符的前面位置开始到字符串末尾处,要移动字符的个数 if (string_length + 2 > string->length)//判断是否满了 { string->p = (char *)realloc(string->p, string_length + 2); for (int i = string_length; i > string_length - position_length; i--)//从插入位置开始将剩下的字符窜后移 string->p[i] = string->p[i - 1]; string->p[string_length + 1] = '\0';//重新设置字符串结束符 *position = addchar;//插入字符串 string->length += 1;//字符串实际长度增加 } else { for (int i = string_length; i > string_length - position_length; i--)//从插入位置开始将剩下的字符窜后移 string->p[i] = string->p[i - 1]; string->p[string_length + 1] = '\0';//重新设置字符串结束符 *position = addchar;//插入字符串 } } } void addstring(Mystring * string, char *str, char searchchar)//任意增加字符串 { printf("test:%d\n", string->length); char * position = mystrchr(string->p, searchchar); if (position != NULL) { int string_length = mystrlen(string->p);//求母串的长度 int position_length = mystrlen(position);//求从插入字符的前面位置开始到字符串末尾处,要移动字符的个数 int str_length = mystrlen(str);//求要添加子串的长度 if (string_length + str_length + 1 > string->length)//判断以前分配的空间是否够用 { string->p = (char *)realloc(string->p, string_length + str_length + 1); string->length += str_length; for (int i = string_length; i >= string_length - position_length; i--)//移动字符,连同字符串结束符一起移动 string->p[i + str_length] = string->p[i]; for (int i = string_length - position_length; i <= string_length - 1; i++) string->p[i] = *str++; } else { for (int i = string_length; i >= string_length - position_length; i--)//移动字符,连同字符串结束符一起移动 string->p[i + str_length ] = string->p[i]; for (int i = string_length - position_length; i < string_length - position_length + str_length; i++) { printf("test:%d,%c\n", i, string->p[i]); string->p[i] = *str++; printf("test:%d,%c\n", i, string->p[i]); } } } } ![图片说明](https://img-ask.csdn.net/upload/201509/11/1441974183_586216.png) 错误代码片段如下: char * position = mystrchr(string->p, searchchar); if (position != NULL) char * p = mystrchr(string->p, ch); return p; char * p = findfirstchar(&string1, 'd'); *p = 'a';

C#添加程序集dll引用之后,可以查看引用的dll源码和编辑源码吗

1正在写项目 2需要引用一个工具类 3想在引用之后,查看工具类的内容。并编辑

C# 找不到第三方dll库 昨天没有问题,重启电脑,再次打开VS,就报错了

没c币了,哪位大神帮看下什么问题。万分感谢 用神思身份证读卡器做二次开发,昨天还能顺利初始化,刷身份证都没问题。如下图 ![图片说明](https://img-ask.csdn.net/upload/202004/09/1586424914_522831.png) !!!但是今天重启电脑,重新打开VS的项目,在启动,却报错:System.DllNotFoundException 找不到DLL库,无法加载。 ![图片说明](https://img-ask.csdn.net/upload/202004/09/1586425201_118324.png) DLL路径及文件 ![图片说明](https://img-ask.csdn.net/upload/202004/09/1586425243_539815.png) 编译生成平台:Debug x86 ![图片说明](https://img-ask.csdn.net/upload/202004/09/1586425286_15566.png)

opencv3.0 MSVCP140D.dll

在VS2013中运行程序,编译通过,但是提示计算机中缺少MSVCP140D.dll文件。按照百度别人的提示安装后放在指定路径,但还是不对。 请问大神们,是不是需要用VS2015才可以运行?

opencv找不到dll的问题

![1](https://img-ask.csdn.net/upload/201712/06/1512555025_264526.png) 如上图所示,运行程序时提示找不到opencv_highgui331.dll(后面还跟着找不到一大堆opencv的dll)。可问题是我已经把opencv的动态链接库文件添加到系统路径中了啊,![图片说明](https://img-ask.csdn.net/upload/201712/06/1512555292_491256.png) ![图片说明](https://img-ask.csdn.net/upload/201712/06/1512555637_438385.png) 有谁知道错误的原因吗?

vs2010无法打开libmysql.lib,非设置路径错误,急求解答,谢谢了

按网上的在c/c++和链接器中分别添加文件夹和lib文件后,运行程序总是无法打开libmysql.lib,这个lib文件是存在的,路径也没错,求帮忙

QT打包发布,找依赖文件DLL

GPSVC.DLL IESHIMS.DLL。QT打包找依赖文件时这两个文件老是不可以。求大神解答。我已经拷贝了这两个文件。怎么还是不可以?我是按照http://blog.csdn.net/gzshun/article/details/7495488这里面的教程。![图片说明](https://img-ask.csdn.net/upload/201604/14/1460603135_724936.png)![图片说明](https://img-ask.csdn.net/upload/201604/14/1460603233_664529.png)![图片说明](https://img-ask.csdn.net/upload/201604/14/1460603204_47640.png)![图片说明](https://img-ask.csdn.net/upload/201604/14/1460603221_229881.png)

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

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

删库了,我们一定要跑路吗?

在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。 在 mysql 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所以 binlog 日志就是我们自救的利器。 接下来就来开启程序员自救之路。 想要自救成功,binlog 这把利器一定要好,在自己之前,我们一定要确定我们有 binlog 这把利器,以下就是确保有 bi...

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

跳槽几乎是每个人职业生涯的一部分,很多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 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

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

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

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

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

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

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

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

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

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

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

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

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

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

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

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

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

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

HTTP与HTTPS的区别

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

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

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

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

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

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

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

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

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

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

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

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

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐