gpt4 book ai didi

c++ - 错误 : 'strstr' was not declared in this scope

转载 作者:行者123 更新时间:2023-11-28 02:17:28 25 4
gpt4 key购买 nike

我正在使用共享内存在树莓派上编写应用程序。我在自己编写的共享内存库中使用函数 strstr() 。当我使用 clang++ 在 OS X 上编译库时,我没有收到任何错误。如果我在我的 raspberry pi 上编译它,我会收到错误消息:“strstr”未在此范围内声明。

我尝试更新我的树莓派但没有成功,你能给我任何提示或解决方案吗?

标题数据

#ifndef SHAREDMEMORY_H
#define SHAREDMEMORY_H

#include <string>
#include <cstdlib>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <iostream>

#define MAX_SERVICES 99

/**
* Datei mit der Datenbank.
*/
#define FILEPATH "database.dat"
/**
* Anzahl der Zeichen in der
* Datenbank.
*/
#define CHARACTERS 2500
/**
* Größe der Datenbank.
*/
#define FILESIZE (CHARACTERS*sizeof(char))

class SharedMemory {
public:
/**
* Constructor
*/
SharedMemory();
/**
* Desctructor
*/
~SharedMemory();
/**
* Method to open file
* @param string: Path to file, has to exist
* @param int: for reading 0
* for writing 1
* @return bool: true on success
* false on error
*/
bool openFile( std::string, int );
/**
* Method to map file to memory
* @param string: Path to file, has to exist
* @param int: for reading 0
* for writing 1
* @return bool: true on success
* false on error
*/
bool mappingFile( int );
/**
* Method to remove file from memory
* @return bool: true on success
* false on error
*/
bool unmapFile();
/**
* Method to write information to file
* @param string: data to write
* e.g. string="#1:127.0.0.1:8000", #number range 0-99.
* @return bool: true on success
* false on error
*/
bool set( std::string );
/**
* Method to read information from file
* @param string: need to cointains id, if success
* then contains info from id.
* e.g. string="1", number range "0"-"99".
* @return bool: true on success
* false on error
*/
bool get( std::string& );
private:
/**
* Datei-Deskriptor.
*/
int fd;
/**
* Zeiger auf Dateiinhalt.
*/
char *mapPointer;
/**
* Path to file
*/
std::string filePath;
};


#endif /* SHAREDMEMORY_H */

Cpp-Datei

#include "SharedMemory.h"

SharedMemory::SharedMemory() { }

SharedMemory::~SharedMemory() { }

bool SharedMemory::openFile( std::string _path, int mode ) {
if ( mode ) {
fd = open( _path.c_str(), O_RDWR, (mode_t)0600 );
} else {
fd = open( _path.c_str(), O_RDONLY, (mode_t)0600 );
}
if ( fd == -1 ) {
return false;
}

return true;
}

bool SharedMemory::mappingFile( int mode ){
void* tmpPointer;
if ( mode ) {
tmpPointer = mmap( 0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 );
} else {
tmpPointer = mmap( 0, FILESIZE, PROT_READ, MAP_SHARED, fd, 0 );
}

if( tmpPointer == MAP_FAILED ) {
close( fd );
return false;
}
mapPointer = (char*) tmpPointer;

return true;
}

bool SharedMemory::unmapFile() {
int ret = munmap(mapPointer, FILESIZE);
close( fd );
if ( ret == -1 ) {
return false;
}

return true;
}

bool SharedMemory::set( std::string s ) {
/**
* Filter id, find the id in the file.
* If Values exist and id is valid, insert value
* -> if value not exists, insert "No_Service".
* if given id is invalid, return false
*/
int mid = s.find( ";" );
int begin = s.find( "#" );
std::string id = s.substr( begin + 1, mid - begin);
std::string info = s.substr( mid + 1, s.length() );
if ( info == "" ) {
info = "No_Service";
}
char* i = strstr( mapPointer, id.c_str() );
while ( *i++ != ';' );
for ( auto x: info ) {
*i++ = x;
}
for ( int j = 0; j < ( 20 - info.length() ); ++j ) {
*i++ = ' ';
}

return true;
}

bool SharedMemory::get( std::string& id ){
/**
* Filter id, find the id in the file.
* save data in string s.
*/
int tmp;
try {
tmp = stoi( id );
} catch ( ... ) {
id = "No_Service";
return false;
}

if ( tmp > 100 || tmp < 1 ){
id = "No_Service";
return false;
}

id += ";";
char* i = strstr( mapPointer, id.c_str() );
while ( *i++ != ';' );
id = "";
do {
id += *i++;
} while( *i != ' ' && *i != ';' );

if ( id == "No_Service" ){
return false;
}

return true;
}

最佳答案

尝试包含 cstring(并调用 std::strstr)或包含 string.h

这在文档中指定:http://en.cppreference.com/w/cpp/string/byte/strstr

关于c++ - 错误 : 'strstr' was not declared in this scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com