首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数strrchr的奇怪行为

函数strrchr的奇怪行为
EN

Stack Overflow用户
提问于 2014-01-17 11:43:52
回答 4查看 182关注 0票数 2

我用strrchr得到了一些奇怪的结果。请帮帮我。

下面是我的代码:

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{

    char szString[32] = "hello-world-and-everyone";
    char* ptemp = NULL;
    ptemp = strrchr(szString, '-');
    if (ptemp == NULL)
    {
        printf("Invalid string\n");
        return 1;
    }
    printf("%s\n", szString);
    printf("%s\n", ptemp );
    *ptemp = 0; 
    printf("%s\n", szString);
    return 0;
}

预期结果:

代码语言:javascript
复制
hello-world-and-everyone
-everyone
hello-world-and-everyone

实际结果:

代码语言:javascript
复制
hello-world-and-everyone
-everyone
hello-world-and
EN

回答 4

Stack Overflow用户

发布于 2014-01-17 11:49:13

实际结果是正确的(这并不令人惊讶,真的)。

输出的前两行符合您的预期,因此我假设您很好地理解它们。下面是最后两行中发生的事情:第一行(赋值)在最后一个破折号的位置以null终止szString

代码语言:javascript
复制
*ptemp = 0; // Replaces the last dash '-' with '\0'

所以字符串变成了

代码语言:javascript
复制
h e l l o - w o r l d - a n d \0 e v e r y o n e \0

现在打印它时,printf会找到第一个结束符,并停在那里。这就是为什么您在输出中看到截断的字符串,而不是原始字符串的原因。

票数 4
EN

Stack Overflow用户

发布于 2014-01-17 11:48:38

strrchr返回一个指针,指向szString-的最后一个匹配项。

这里:

代码语言:javascript
复制
*ptemp = 0; 

将它指向的值设置为0 (NULL),替换-。所以,当您打印szString时,它就到此为止了,因为字符串是使用0终止的。

将其更改为:

代码语言:javascript
复制
*ptemp = 65; // ASCII 'A'

您的输出将是:

问候-世界和每个人

-everyone

hello-world-andAeveryone

票数 3
EN

Stack Overflow用户

发布于 2014-01-17 11:48:24

strrchr不会分配和复制到新的字符串中。它返回一个指向给定字符所在的现有字符串的指针。所以,当你这样做的时候:

代码语言:javascript
复制
*ptemp = 0;

将原始字符串中该位置的字符设置为空(0)。最后的结果是:

代码语言:javascript
复制
hello-world-and
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21177434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档