- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有这个程序:
#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;
}
当我运行它时,我得到:
p: Character
char1: ExtraCharacter
(p-char1): 5
正如预期的那样。
但这不是问题,我不确定为什么"Character" - "ExtraCharacter"
是一个整数(5)?也许不是整数,而是数字/数字。其实我不明白为什么“字符”存储在p
中,而不是内存地址。
如果我从书上理解的很好,strstr()
返回一个内存地址,它不应该更像是一个奇怪的值,比如十六进制 (0x0045fe00) 或类似的东西吗?我的意思是,它是 cout << p
不是 cout << *p
显示该内存地址的实际值。
谁能给我解释一下它是如何工作的?
P.S.:如果标题不是那么连贯,我深表歉意。
最佳答案
But this is not the problem, I'm not sure why "Character" - "ExtraCharacter" is an integer (5)?
你从一个指针中减去另一个指针,结果 - 数字,从 char
char1
指向 char
p
的距离> 指向。这就是指针算法的工作原理。
注意:只有当两个指针都指向同一个数组(或最后一个元素之后)时,此减法才有效,您的代码就是这种情况,但您需要小心。例如,如果 strstr()
没有找到 susbtring,那么它将返回 nullptr
并且您的减法将有 UB。所以至少在减去之前检查 p
(并将 nullptr
传递给 std::cout
也会有 UB)
If I understood well from a book, strstr() returns a memory address, shouldn't it be more like a strange value, like a hex (0x0045fe00) or something like that? I mean, it's cout << p not cout << *p to display the actual value of that memory address.
是的 p
是一个指针,也就是内存地址。 std::ostream
有特殊规则如何将指向 char 的指针打印为字符串,因为 C 中的字符串以这种方式存储。如果您想将其视为指针,只需将其转换为:
std::cout << static_cast<void *>( p );
然后你会看到它是一个地址。
关于c++ - 为什么 strstr() - char pointer = number?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48688685/
题目地址:https://leetcode.com/problems/implement-strstr/description/ 题目描述 Implement strStr(). Return
这里是 C 的初学者。 我知道 strstr() 可用于查找字符串是否包含某个子字符串并且 printf() 可以显示彩色输出(如此处解释:stdlib and colored output in C
我有一个二进制数据文件,其中散布着各种字符串。我正在尝试编写 C 代码来查找文件中第一次出现的用户指定字符串。 (我知道这可以用 bash 完成,但出于其他原因我需要一个 C 代码。)目前的代码是:
我制作了 strstr() 函数,但程序没有给出任何输出,只是一个空白屏幕。请查看代码。 #include #include const char* mystrstr(const char *
你能找出这段代码中的错误吗,即使我传递了有效的参数来查找,它也无法打印歌曲 #include #include char tracks[][80] = { "I left my heart
我正在尝试匹配整个字符串,而不仅仅是其中的一部分。例如,如果 needle 是 2,我只想匹配 string 2 而不是 20、02 或 22 或任何相关内容。 我正在使用 strstr 作为: #i
在 OpenGL superbible 4th ed 中,第 70 页上的示例读取 //returns space-delimited names of all extensions supporte
你能找出这段代码中的错误吗,即使我传递了有效的参数来查找,它也无法打印歌曲 #include #include char tracks[][80] = { "I left my heart
这里的目标是将整个文本文件转储到缓冲区中,然后使用 strcasestr() 函数查找我在缓冲区中查找的单词的指针。它不断地给我段错误错误。起初,我认为可能是尺寸问题,所以我尝试使用较小的尺寸,但也不
我试图通过 strstr() 函数检查子字符串(“DATA”)是否(以及在哪里)位于大字符串(位于缓冲区 - LinearBuffer 中),但它似乎不起作用,并且我不知道为什么即使我的源字符串(位于
这是我到目前为止编写的代码,但我想用 int myStrStr 而不是 char myStrStr 但是当我用 int 代替时的 char ,它给了我一个错误。请帮忙。 int my_strlen(c
如果进程名称是“System”,则不进行 DbgPrint。如果是任何其他进程,现在 DbgPrint 都可以,但由于某种原因,它没有像预期的那样工作。 我尝试过:if( strstr( ImageN
我正在尝试使用 strstr 使用子字符串搜索任何匹配项并将其与文本行进行比较,但到目前为止尚未成功获得匹配项。我正在使用 popen 打开并读取文件,同时尝试仅使用 ipv4 地址进行搜索以查找匹配
我现在编写的程序遇到了一些问题。 strstr 仅当子字符串位于字符串末尾时才输出 此后它还会输出一些垃圾字符 我在使用“const char *haystack”然后向其中添加输入时遇到了问题,因此
我正在从头开始学习 C,我尝试制作一个小程序,在二维数组中搜索用户输入。 但是我的代码没有按预期工作并且总是返回 false。 我的代码: #include #include char songs[]
我正在从头开始学习 C,我尝试制作一个小程序,在二维数组中搜索用户输入。 但是我的代码没有按预期工作并且总是返回 false。 我的代码: #include #include char songs[]
由于 strstr 函数,我在该方法内有一个无限循环。是因为我将结构类型与字符类型相匹配吗? car* find(char* type){ car* stringCurr = list_hea
我的目标是在名为 myStrStr 的 C 函数中重新创建 strstr,如果在 haystack 中找到子字符串并且返回 1,则返回 1 0 如果不是,则将匹配的子字符串复制到缓冲区中。 我尝试编写
所以我尝试制作自己的 strstr 函数,并实现以下功能: char *mystrstr(char *haystack, char *needle); // find the first oc
我正在阅读 String searching algorithm维基百科文章,它让我想知道什么算法 strstr在 Visual Studio 中使用?我应该尝试使用其他实现方式,还是 strstr
我是一名优秀的程序员,十分优秀!