【问题标题】:program to reverse a string [closed]反转字符串的程序[关闭]
【发布时间】:2013-01-24 15:34:01
【问题描述】:

我是 C 的初学者。我正在尝试这个程序来反转字符串。有什么问题吗?

#include<stdio.h>
#include<string.h>

char *reverse(char *);

void main()
{
    char str[]="kundan";
    int len=strlen(str);
    char *ptr;
    ptr=reverse(str);
    printf("the reversed string is :%s",ptr);
}

char *reverse(str)
{
    char *rtr=str;
    char qtr[10];

    for(int i=len-1;i<=0;i--)
    {
        qtr=rtr+i;
        qtr++;
    }
    return qtr;
}

【问题讨论】:

  • 您进行了哪些故障排除?当您尝试编译和/或运行它时,您看到了什么?
  • for(int i=len-1; i>=0 ;i--)
  • 还有,qtr是一个数组,不能写qtr++
  • 老兄,至少告诉我们你在编译和运行它时得到了什么。当你的整个目标是反转一个字符串时,为什么你必须弄乱指针,只需执行一个 strlen 并向后打印它
  • @KundanNegi - 如果您仍然遇到问题,请使用最新版本的代码更新您的原始帖子,并让我知道您的立场(即您遇到了什么样的问题)。不要只是发布您的代码并说“帮我解决这个问题”,发布您的代码并说出您为找出问题所做的工作,以及您遇到的困难和需要帮助的地方。回复时,请务必以“@phonetagger”开头,以便我知道您回复了我。

标签: c


【解决方案1】:

你不尊重变量scope。一个有用的参考,here

例如,在reverse() 中,您在for 循环中引用len。但是,lenmain 中定义,因此不适用于reverse()(这甚至可以编译吗?)

您从reverse() 返回的值是指向仅在该函数范围内的堆栈值的指针。虽然调用函数main() 将以有效指针结束,但当reverse() 返回时,指针所指的信息已超出范围,因此是易失性,受制于改变。对于这个简单的示例,您可以按值而不是按引用返回反转的字符串。 (发回字符数组,而不是指向它们的指针。)

【讨论】:

  • 我编译了它,它说反向函数参数不正确
  • 您已经前向声明了reverse(又名原型),但实际声明与它不匹配——事实上,它没有给出变量的类型。你需要char *reverse(char *str)
猜你喜欢
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 2019-03-23
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多