gpt4 book ai didi

c++ - 字符 *newx=p+strlen(str1);这将如何执行,因为 strstr 将返回指向另一个字符串的第一个匹配字符的指针

转载 作者:行者123 更新时间:2023-11-28 04:23:15 26 4
gpt4 key购买 nike

我无法理解这段代码将如何执行。据我所知,strstr() 将返回一个指向匹配字符串首字母的指针。那么,当 p 是一个指针并且 strlen() 返回一个整数值时,我们如何做 char *newx=p+strlen(str1); 呢?

p=strstr(str2,str1);
if(p){
char *newx=p+strlen(str1);
strcpy(t,newx);
}

最佳答案

这是简单的指针运算

向指针添加一个整数会使指针递增指定数量的元素。

假设你有一个指针 T *ptr。当你做这样的事情时:

T *ptr2 = ptr + N;

编译器实际上做了(优化的)等价物:

T *ptr2 = reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(ptr) + (sizeof(T) * N));

因此,有问题的代码使用 strstr()str2 字符串中搜索子字符串 str1 并获取指向该子字符串的指针子串。如果找到子字符串,则通过 strlen() 将该指针递增到子字符串末尾紧跟的字符地址,然后 strcpy( ) 用于将该地址中的剩余文本复制到 t 字符串中。

例如:

const char *str2 = "Hello StackOverflow";
const char *str1 = "Stack";
const char *p;
char t[10];

p = strstr(str2, str1); // p points to str2[6]...
if (p) { // substring found?
const char *newx = p + strlen(str1); // newx points to str2[11]...
strcpy(t, newx); // copies "Overflow"
}

关于c++ - 字符 *newx=p+strlen(str1);这将如何执行,因为 strstr 将返回指向另一个字符串的第一个匹配字符的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54976955/

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