我有一条看起来像这样的路径:
/home/duke/aa/servers/**servername**/var/...morefiles...
使用php,我想从路径中提取"servername"
不幸的是我不是那么精通php,但我想出了一些使用strstr()
但我只使用PHP版本5.2的地方,其中一个参数函数需要5.3
什么可能会返回"servername"的代码?
我正在用valgrind检查一些代码,我得到了这个错误:
==7001== Invalid read of size 1
==7001== at 0x402E21B: strstr (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==7001== by 0x8049742: replace_in_file (functions.c:191)
==7001== by 0x8049C55: parse_dir (functions.c:295)
==7001== by 0x8049059: main (main.c:214)
==7001== Address 0x42018c3 is 0 bytes after a block of size 3 alloc'd
==7001== at 0x402B018: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==7001== by 0x80496EC: replace_in_file (functions.c:183)
==7001== by 0x8049C55: parse_dir (functions.c:295)
==7001== by 0x8049059: main (main.c:214)
Run Code Online (Sandbox Code Playgroud)
代码段如下所示:
long int replace_in_file(char **sets, FILE *file, char *path, const char *mode){
long int n = 0, size …
Run Code Online (Sandbox Code Playgroud) 我正在树莓派上编写一个具有共享内存的应用程序。我在我自己编写的共享内存库中使用函数 strstr() 。当我在 OS X 上使用 clang++ 编译库时,没有出现错误。如果我在树莓派上编译它,我会收到错误:\'strstr\' 未在此范围内声明。
\n\n我尝试更新我的树莓派,但没有成功,你能给我任何提示或解决方案吗?
\n\n标题-Datei
\n\n#ifndef SHAREDMEMORY_H\n#define SHAREDMEMORY_H\n\n#include <string>\n#include <cstdlib>\n#include <stdio.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <sys/mman.h>\n#include <iostream>\n\n#define MAX_SERVICES 99\n\n/**\n * Datei mit der Datenbank.\n */\n#define FILEPATH "database.dat"\n/**\n * Anzahl der Zeichen in der\n * Datenbank.\n */\n#define CHARACTERS 2500\n/**\n * Gr\xc3\xb6\xc3\x9fe der Datenbank.\n */\n#define FILESIZE (CHARACTERS*sizeof(char))\n\nclass SharedMemory {\npublic:\n /**\n * Constructor \n */\n SharedMemory();\n /**\n * Desctructor\n */\n ~SharedMemory();\n /**\n * Method to open file\n * @param string: Path to file, has …
Run Code Online (Sandbox Code Playgroud) 我有一个二进制数据文件,其中包含各种字符串.我正在尝试编写一个C代码来查找文件中第一次出现用户指定的字符串.(我知道这可以用bash完成,但出于其他原因我需要一个C代码.)现在的代码是:
#include <stdio.h>
#include <string.h>
#define CHUNK_SIZE 512
int main(int argc, char **argv) {
char *fname = argv[1];
char *tag = argv[2];
FILE *infile;
char *chunk;
char *taglcn = NULL;
long lcn_in_file = 0;
int back_step;
fpos_t pos;
// allocate chunk
chunk = (char*)malloc((CHUNK_SIZE + 1) * sizeof(char));
// find back_step
back_step = strlen(tag) - 1;
// open file
infile = fopen(fname, "r");
// loop
while (taglcn == NULL) {
// read chunk
memset(chunk, 0, (CHUNK_SIZE + 1) * sizeof(char)); …
Run Code Online (Sandbox Code Playgroud) 我可以使用strstr函数来匹配确切的单词吗?例如,假设我有单词hello
和输入字符串line
:
如果
char* line = "hellodarkness my old friend";
Run Code Online (Sandbox Code Playgroud)
我用
result = strstr(line, "hello");
Run Code Online (Sandbox Code Playgroud)
result
将匹配(不是NULL),但我想只匹配确切的单词"hello"(以便"hellodarkness"不匹配),结果将为NULL.是否可以使用strstr
或者我必须fscan
逐字逐句扫描并检查匹配?
我有这个程序:
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
int main()
{
char char1[30] = "ExtraCharacter", char2[30] = "Character", *p;
p = strstr(char1, char2);
cout << "p: " << p << endl;
cout << "char1: " << char1 << endl;
cout << "(p-char1): " << (p-char1) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到:
p: Character
char1: ExtraCharacter
(p-char1): 5
Run Code Online (Sandbox Code Playgroud)
正如所料.
但这不是问题,我不确定为什么"Character" - "ExtraCharacter"
是整数(5)?也许不是整数,而是数字/数字.实际上我不明白为什么存储"Character" p
,而不是内存地址.
如果我从书中理解得很好,strstr()
返回一个内存地址,它不应该更像是一个奇怪的值,比如十六进制(0x0045fe00)或类似的东西吗?我的意思是,它cout << p
不是cout << *p
显示该内存地址的实际值. …
您好,我正在尝试创建自己的strstr()
函数,但我无法弄清楚为什么它会返回分段错误。我正在尝试在另一个字符串中搜索一个字符串,然后返回指向第一个“相同”字母的指针。任何帮助,将不胜感激。这是我的代码:
char* ms_search(char *Str1,char* Str2){
char* p = NULL;
int i,k=0,j = 0;
for(i = 0;i < ms_length(Str1); i++){
if(Str1[i] == Str2[k]){
if(k == 0){
p = &Str1[i];
j= i;
}
if(k == ms_length(Str2)){
break;
}
k++;
}
else{
if(Str1[i] == Str2[0]){
p = &Str1[i];
k=1;
j= i;
}
else{
j=0;
k = 0;
p = NULL;
}
}
}
if(p != NULL){
Str1[ms_length(Str2)+1] = '\0';
}
return &Str1[j];
}
int main(){
int i;
char* p2;
char* p="lolaaa"; …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用strstr函数计算字符串'TT'出现在DNA序列ATGCTAGTATTTGGATAGATAGATAGATAGATAGATAGATAAAAAAATTTTTTTT中的次数,而不计算任何'T'两次.它应该出现5个'TT'实例,但我的功能是给我9,如果你重叠'TT',你会得到的.我该如何解决这个问题,以便只计算'TT'的每个实例并且不计算两次T?这是我的计划:
/***************************************************************************************/
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
//FUNCTION PROTOTYPES
int overlap(char *ptr1, char *ptr2);
int main()
{
//Declare and initialize objects
int count(0); // For DNA sequence
//DNA SEQUENCE
char DNA_sequence[] = "ATGCTAGTATTTGGATAGATAGATAGATAGATAGATAGATAAAAAAATTTTTTTT";
char thymine_group[] = "TT";
char *ptr1(DNA_sequence), *ptr2(thymine_group);
//Send QUOTE to function
count = overlap(ptr1, ptr2);
//Print number of occurences.
cout << "'TT' appears in DNA sequence " << count << " times" << endl;
return 0;
}
//FUNCTION 1 USING CHAR ARRAYS AND …
Run Code Online (Sandbox Code Playgroud) 如何删除字符串中的“-” ?
$text = 'lorem ipsum - dolor sit amet!';
$lorem = strstr($text, '-');
echo $lorem;
Run Code Online (Sandbox Code Playgroud)
返回:
- 多洛坐阿梅特!
我需要这个:
多洛坐阿梅特!
我是新来的,这是我的第一个问题.
我已经搜索过这个问题了,但是找不到这类问题.所以这就是它.
我正在使用2d字符数组为名称数据库编写基于菜单的程序.下面是我的主要功能.
int main(void)
{
char name[MAX][25] = { 0 };
char choice;
while (1) {
printf("******************menu****************\n");
printf("i: input\n");
printf("p: print\n");
printf("f: find\n");
printf("d: delete\n");
printf("s: sort\n");
printf("e: edit\n");
printf("q: quit\n");
printf("**************************************\n\n");
printf("Enter your choice: ");
scanf(" %c", &choice);
getchar();
switch (choice) {
case 'i':
input(name);
break;
case 'p':
print(name);
break;
case 'f':
find(name);
break;
case 'q':
return 0;
default:
printf("Invalid choice\n");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输入和打印功能正常,但我在查找功能方面有问题.这里是.
void find(char (*p)[25])
{
int i;
char str[25];
if (count == 0) { …
Run Code Online (Sandbox Code Playgroud)