用指针反向输出字符串

发布于 2022-10-15 08:55:45 字数 736 浏览 23 评论 0

程序的功能是实现字符串的反向赋值,即源字符串为“abcde”的话,则输出字符串为“edcba”。指出其中的错误并改正程序,请不要改变程序的整体框架。
char * reserveString(const char *str)
{
        char * p = NULL;
    unsigned int len = strlen(str);
int i = 0;

if(len >= 0)
{
    for( i = len; i > 0; i--)
{
        *p = *(str + i);
        p++;
}
}
else
{
     p = NULL;
}

return p;
}

main()
{
        char p[] = “Hello World!”;
    char *rp = reserveString(p);
    printf(“%s\n%s”,p,rp);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

只等公子 2022-10-22 08:55:45

这是一道面试题 ,希望高手帮忙看看

聚集的泪 2022-10-22 08:55:45

p指哪儿去了?for的条件也不对啊。
贴代码能用

  1. 代码框不?

复制代码

潦草背影 2022-10-22 08:55:45

char *rp = reserveString(p);这句代码能不能这样写的啊。好郁闷啊。。而且好像程序里面没有给指针分配具体的内存空间吧。。

辞旧 2022-10-22 08:55:45

你p指向的内存中哪里,你直接拿来个指针就赋值?char *p是函数内部的变量,他是在栈上的,函数返回的时候,这个变量就没了,你返回的是什么地址?起码也要先在堆上分配内存给p,再操作啊。
至于赋值的过程,应该很简单了,先判断字符串的长度,然后读指针从后往前减,写指针从头开始加,最后填个0.就行了。

回梦 2022-10-22 08:55:45

这个函数的功能就是将HELLOWORLD反向输出,输出DLROWOLLEH

扛刀软妹 2022-10-22 08:55:45

本帖最后由 ljsdaya 于 2011-04-21 21:57 编辑

回复 1# yao_68

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. char *reserveString(const char *str)
  5. {
  6.         char                            *p = NULL;
  7.         char                            *rp= NULL;
  8.         unsigned int          len = strlen(str);
  9.         int                                 i = 0;
  10.         //分配足够的内存空间
  11.         p = (char *)malloc( (len + 1) * sizeof(char));
  12.         rp = p;     //保存指针地址
  13.         if (p == NULL) exit -1;
  14.         if(len >= 0)
  15.         {
  16.                 //注意*(str+len)应该是NUL
  17.                 //i 要到0
  18.                 for( i = len - 1; i >= 0; i--)
  19.                 {
  20.                         *p = *(str + i);
  21.                         p++;
  22.                 }
  23.         }
  24.         else
  25.         {
  26.                 rp = NULL;
  27.                 //释放p
  28.                 free(p);
  29.         }
  30.         // 字符串结束标志
  31.         p = '\0';
  32.         return rp;
  33. }
  34. int main()
  35. {
  36.         //引号“
  37.         char p[] = "Hello World!";
  38.         char *rp = reserveString(p);
  39.         if (rp != NULL){
  40.                 printf("%s\n%s",p,rp);
  41.                 free(rp);
  42.         }else
  43.                 return -1;
  44.         return 0;
  45. }

复制代码刚刚开始先if(len <= 0) return 0;就好拉~~

暮年 2022-10-22 08:55:45

按照你的意思可以这样:(这是其中一种方法,其它的方法至少有三种以上)

  1. /**************************************************************************
  2. 程序的功能是实现字符串的反向赋值,即源字符串为“abcde”的话,
  3. 则输出字符串为“edcba”。指出其中的错误并改正程序,请不要改变程序的整体框架。
  4. **************************************************************************/
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. char * reserveString(const char *str)
  9. {
  10.         char * p = NULL;
  11.         char * temp = NULL;
  12.         int i = 0;
  13.         unsigned int len = strlen(str);
  14.        
  15.         temp = p = (char *)malloc( len );         /*malloc一个len大的内存块,temp用以记住起始p指针指向的位置,后面return这个位置就行了*/       
  16.        
  17.         if(len >= 0)
  18.         {
  19.                 for( i=len-1; i>=0; i-- )/*p是一个指向字符数组的指针,数组下标应该是从0到len-1*/
  20.                 {
  21.                         *p = *(str+i);
  22.                         p++;
  23.                 }
  24.                 *p = '\0'; /*最好加上*/
  25.         }
  26.         else
  27.         {
  28.                 p = NULL;
  29.         }
  30.         return temp;
  31. }
  32. int main()
  33. {
  34.         char p[] = "Hello World!";
  35.         char *rp = reserveString(p);   
  36.        
  37.         printf("%s\n%s\n",p,rp);
  38.         return 0;
  39. }

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文