我想知道是否有一个本机C++(或STL/Boost)函数会在CString中搜索指定的字符串?
例如
CString strIn = "Test number 1";
CString strQuery = "num";
bool fRet = SomeFn(strIn, StrQuery);
if( fRet == true )
{
// Ok strQuery was found in strIn
...
Run Code Online (Sandbox Code Playgroud)
我发现了一些像CompareNoCase IndexOf等函数......但是到目前为止他们并没有真正按照我的意愿去做(或者使用CLR/.Net)
谢谢!
我正在使用cstring函数,该函数应该比较两个字符串MyString和m2的值.我有#include所以它绝对不是那样的.这些是我的错误.
(74) : error C2275: 'MyString' : illegal use of this type as an expression
(74) : error C2660: 'MyString::length' : function does not take 1 arguments
(76) : error C2275: 'MyString' : illegal use of this type as an expression
Run Code Online (Sandbox Code Playgroud)
这是我从中获取它们的代码.
bool MyString::operator ==(const MyString &m2) const
{
int temp = 0;
if (length(MyString) = length(m2)) // 74
{
if (strcmp(MyString, m2)) // 76
{
temp = 1;
}
else
{
temp = 2;
}
}
if(temp = 2) …Run Code Online (Sandbox Code Playgroud) 我在c ++程序中遇到了比较问题.这是简化版.
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
if(argc>2){cout<<"3+Args"<<endl;}else//???
if(argc==2){
cout<<"2args"<<endl;
if(argv[1]=="/hide-icons"){}
if(argv[1]=="/show-icons"){}
if(argv[1]=="/reinstall"){setAsDefault();}
if(argv[1]=="/?"){showPossibleCommands();}
if(argv[1]=="/1"){cout<<"go"<<endl;FirstRun();}
}else{showPossibleCommands();cout<<argv[0]<<endl;}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行"programname.exe/1"时,我的程序写入"2args"而不是"go".我错过了一些明显的东西吗
在我的编程课中,我们目前有一个项目要求我们在程序中加入参数.然后我需要能够检查其中一个参数,看看哪个值传递给程序,以便我可以选择适合该程序的行为.在之前的家庭作业中,我使用以下代码使用cstring库中包含的strcmp函数执行此操作:
int main(int argc, char *argv[]) {
if (strcmp(argv[1], "yes") == 0) {
// do this code
} else if (strcmp(argv[1], "no") == 0) {
// do this code
}
}
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,我们不允许在此项目中使用cstring库.我怎么能这样做?
我有以下代码:
int main() {
char *sPPhrase[51];
/* Input */
printf("Enter string (max. 50 chars):\n");
fflush(stdout); /* Works around an annoying Eclipse bug that fails to display the output from the printf command */
scanf("%s", *sPPhrase); /* Won't work */
/* More code goes here */
}
Run Code Online (Sandbox Code Playgroud)
该scanf()命令失败,我想,是因为*sPPhrase不可写的sPPhrase指向一个字符串常量.编译器没有任何错误的线索.稍后,我需要将此字符串传递给此函数:
char* reverse(char* sPPhrase[]);
字符串常量不可写,但我需要将此char*传递给此函数.如何重写我的代码以使其工作?
我有以下代码,它从函数中获取返回值 char*
cDestDrive = ReadFromRegistry(HKEY_CURRENT_USER,NDSPATH,szDestPathRoot);
Run Code Online (Sandbox Code Playgroud)
我可以读取内部的值,cDestDrive 直到我分配它为止.我分配它的那一刻:
CString strServerAddress = cDestDrive;
Run Code Online (Sandbox Code Playgroud)
cDestDrive的值被更改(损坏),我无法获得CString strServerAddres任何想法的价值,为什么会发生这种情况.
编辑: 从注册表中读取的代码
char* CNDSShellExtender::ReadFromRegistry(HKEY hKey,LPCTSTR lpNDS,LPSTR lpRegKey)
{
HKEY hRegKey=NULL;
if(hKey==NULL || lpNDS==""||lpNDS==NULL||lpRegKey==""||lpRegKey==NULL)
MessageBox(NULL,"Reading from Registry Failed!Invalid Path",
_T("Network Drive Solution"),
MB_ICONERROR);
LONG lOpenRes=RegOpenKey(hKey,lpNDS,&hRegKey);
if (lOpenRes!=ERROR_SUCCESS ||lpNDS==NULL)
MessageBox ( NULL, "Can not Find Any Server to Connect",
_T("NDSShellExtension"),
MB_ICONERROR );
if(lOpenRes==ERROR_SUCCESS && lpNDS!=NULL)
{
TCHAR tSZValue[MAX_PATH] = {0};
DWORD dwBufSize=MAX_PATH;
LONG lCloseOut;
LPBYTE lpStorage = reinterpret_cast<LPBYTE>(tSZValue);
char* cpRegKeyVal=tSZValue;
if (ERROR_SUCCESS == RegQueryValueEx(hRegKey,lpRegKey , 0, …Run Code Online (Sandbox Code Playgroud) 我有一个小项目,我需要比较一个流的第一个字节.问题是该字节可以是0xe5或任何其他不可打印的字符,因此表示该特定数据是坏的(一次读取32位).我可以允许的有效字符是AZ,az,0-9,'.' 和空间.
目前的代码是:
FILE* fileDescriptor; //assume this is already open and coming as an input to this function.
char entry[33];
if( fread(entry, sizeof(unsigned char), 32, fileDescriptor) != 32 )
{
return -1; //error occured
}
entry[32] = '\0'; //set the array to be a "true" cstring.
int firstByte = (int)entry[0];
if( firstByte == 0 ){
return -1; //the entire 32 bit chunk is empty.
}
if( (firstByte & 0xe5) == 229 ){ //denotes deleted.
return -1; //denotes deleted.
}
Run Code Online (Sandbox Code Playgroud)
所以问题在于,当我尝试执行以下操作时: …
在C中,声明像这样的char指针
char* p="Hello";
Run Code Online (Sandbox Code Playgroud)
为字符串文字分配一些内存Hello\0.当我这样做之后
p="FTW";
Run Code Online (Sandbox Code Playgroud)
分配给的内存会发生什么Hello\0?地址p是否指向更改?
我一直在使用Stroustrup的C++编程语言,而且我在早期的exersize方面遇到了困难.任务是构建一个反转ac样式字符串的方法rev.我认为我的逻辑是正确的,但是当我尝试修改字符串时出现错误.我可以不这样做吗?
int strlen_(char* string)
{
int count = 0;
while (*string != '\0'){
count ++;
string ++;
}
return count;
}
void rev(char* string)
{
//length of the string is going to be useful
int len = strlen_(string);
//two counters, one going forward, one going back
int forwardIndex = 0;
int backwardIndex = len-1;
char temp;
while (forwardIndex < backwardIndex){
temp = string[forwardIndex];
string[forwardIndex] = string[backwardIndex]; //Exception Here
string[backwardIndex] = temp;
forwardIndex--;
backwardIndex--;
}
}
void main()
{
char* test …Run Code Online (Sandbox Code Playgroud) 我试图将内存分配给char指针(它应该在以后存储十六进制值)一旦我运行此代码程序崩溃.(我必须使用C-String)
int main() {
char *c = (char*)malloc(sizeof(unsigned int)*2);
}
Run Code Online (Sandbox Code Playgroud)
我在互联网上看到这个例子,但它在我的机器上失败了.为什么?