c - 使用 strrchr 函数时出现段错误

标签 c string strrchr

这是我的程序,它反转了一个字符串。我试图在最后使用函数 strrchr,因为我在标准输入中输入字符串 James Bond。所以我想看看 strrchr 函数是否给出了一个指向上述字符串的值字符 B 的指针。

#include<stdio.h>
#include<string.h>
int main ()
{
    char rt[100];
    char temp,*op;

    printf("enter a string\n");
    scanf("%s",rt);

    printf("the string you entered is %s\n",rt);

    int i, k, length;
    i=0;
    k=strlen(rt);

    printf("strlen gives =%d\n",k);

    length=k;
    length--;

    for(;i<k/2;i++)
    {
        temp=rt[i];
        rt[i]=rt[length-i];
        rt[length-i]=temp;
    }

    printf("the reverse string is %s\n",rt);

    op=strrchr(rt,'B');
    printf("strrchr gives %c\n",*op);
}

现在当我跑到上面时我得到

./a.out 
enter a string
James Bond
the string you entered is James
strlen gives =5
the reverse string is semaJ
Segmentation fault

这可能是什么原因。上面的 strrchr 用法错了吗?

最佳答案

在使用 * 一元运算符取消引用 op 之前,您必须检查它是否为 NULL(当字符为未找到):

op = strrchr(rt, 'B');

if (op != NULL)
  printf("strrchr gives %c\n", *op);

关于c - 使用 strrchr 函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435847/

相关文章:

c - 在多个 mkl_dss_solve 实例中使用一个 LU 分解

c - 我需要知道用 cairo 在 gtk 中绘制形状的最简单方法

c - Void 函数段错误中的字符串错误

c - 使用 strrchr() 时出现段错误

c - 我的 fget 出现段错误?

c - 将字符串分配给某物

c - 函数 strrchr 的奇怪行为

c - 无法执行查找与给定字符匹配的字符串的第一个字符的代码

C++ popen() 的输出到一个字符串

C 字符串库