我的stringreverse程序输出错误。什么是我的代码中的错误?

时间:2014-04-23 09:55:54

标签: c pointers

#include<stdio.h>
#include<conio.h>
#include<string.h>
char* strreverse(char*);
int main()
{
char *rev_string;
char *name="computer";
clrscr();
rev_string=strreverse(name);
printf("%s", rev_string);
getch();
return 0;
 }
 char* strreverse(char *name)
 {
int length=strlen(name);
char *ptr;
char *rstr;
for(ptr=name+(length-1);ptr>=name;ptr--)
    {
     *rstr=*ptr;

     printf("%c",rstr);
     rstr++;
     }
     *(rstr)=NULL;
     return rstr;
}

以上是我的代码。我试图编写一个字符串反向程序,而不使用数组。但我没有得到输出retupmoc。我的代码有什么问题?如何在char *中插入null char?

3 个答案:

答案 0 :(得分:1)

您没有分配内存来保存反向字符串。尝试

char *rstr = calloc(1, length+1);

也应该是

printf("%c", *rstr); // dereference
*(rstr)= '\0'; // instead of NULL

答案 1 :(得分:1)

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

char* strreverse(const char*);

int main(){
    char *rev_string;
    char *name="computer";
    clrscr();
    rev_string=strreverse(name);
    printf("%s\n", rev_string);
    free(rev_string);
    getch();
    return 0;
}

char* strreverse(const char *name){
    int length=strlen(name);
    const char *ptr;
    char *ret, *rstr = malloc(length + 1);
    if(ret=rstr){
        for(ptr=name+length;ptr != name;){
            *rstr++ = *--ptr;
        }
        *rstr = '\0';
    }
    return ret;
}

答案 2 :(得分:1)

在这里,您可以找到字符串反转的简短解决方案:

#include<stdio.h>
#include<string.h>
int strreverse(char* , char*);

int main()
{
   char rev_string[10] = {0};
   char name[10]="computer";
   strreverse(name, rev_string);
   printf("%s\n", rev_string);
   return 0;
}

int strreverse(char *name, char *rStr)
{
   int i = 0;
   int length = strlen(name);
   while(i < length)
   {
      rStr[i] = name[length-i-1];
      i++;
   }
   return 0;
}

尝试跑步并享受乐趣。