用于反转字符串的strinverse函数出错

时间:2014-06-15 18:07:22

标签: c

我编写了以下函数来反转字符串s

char *strinverse( const char *s ){
    char *t;
    int i = 0;
    while (*s) {
        s++;
        i++;
    }
    while (i >= 0){
        s--;
        *t = *s;
        t++;
        i--;
    }
    *t = '\0';
    return t;
}

int main(void){

    char v[4]="abc";
    char r[4];
    char *pr = r;

    pr = strinverse(v);
    printf("%s", pr);
    return 0;

}

想法是找出第一个while循环中字符串s的长度,然后在将相应值复制到s时减少t的指针。由于某种原因,程序崩溃,编译器没有给我任何信息。也许主要功能有问题?谢谢你的建议!

4 个答案:

答案 0 :(得分:1)

回答编辑

#include<stdio.h>
#include<stdlib.h>
char *strinverse(const char *s ){
  char *t, *p;
  int i = 0;
  while (*s) {
    s++;
    i++;
  }
  t = (char*)malloc((i + 1) * sizeof(char)); //added this!
  p = t;
  while (i >= 0){
    s--;
    *t = *s;
    t++;
    i--;
  }
  *t = '\0';
  return p;
}

int main(void){

  char v[4]="abc";
  char *pr;

  pr = strinverse(v);
  printf("%s\n", pr);
  return 0;

}

答案 1 :(得分:1)

程序崩溃的原因是您没有为指针t分配空间。在这种情况下,您的程序会调用未定义的行为。为t

分配空间
 t = malloc(i + 1);  

最后不要忘记使用free(t)释放内存。

答案 2 :(得分:1)

我会使用一个在原地更改字符串的函数。

void reversestr(char *s)
{
        char tmp;
        size_t i, len = strlen(s);

        for (i = 0; i < len / 2; i++) {
                tmp = s[i];
                s[i] = s[len - 1 - i];
                s[len - 1 - i] = tmp;
        }
        s[len] = '\0';
}

如果您需要单独使用反向字符串,则可以在致电strdup之前使用reversestr。 BTW:以&#34; str&#34;开头的函数名称保留用于C标准库的功能。

答案 3 :(得分:0)

你没有在指针“t”中创建malloc,你在这一行中遇到问题“* t = * s;”