Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 反转字符串的strinverse函数出错_C - Fatal编程技术网

C 反转字符串的strinverse函数出错

C 反转字符串的strinverse函数出错,c,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 m

我编写了以下函数来反转字符串
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
的长度,然后在将相应的值复制到
t
时减少
s
的指针。由于某种原因,程序崩溃了,编译器没有给我任何信息。也许主函数有问题?谢谢你的建议

答案已编辑

#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;

}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}
答案已编辑

#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;

}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}
答案已编辑

#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;

}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}
答案已编辑

#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;

}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}

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

 t = malloc(i + 1);  

不要忘记在最后使用
free(t)
释放内存程序崩溃的原因是您没有为指针
t
分配空间。在这种情况下,程序调用未定义的行为。为
t

 t = malloc(i + 1);  

不要忘记在最后使用
free(t)
释放内存程序崩溃的原因是您没有为指针
t
分配空间。在这种情况下,程序调用未定义的行为。为
t

 t = malloc(i + 1);  

不要忘记在最后使用
free(t)
释放内存程序崩溃的原因是您没有为指针
t
分配空间。在这种情况下,程序调用未定义的行为。为
t

 t = malloc(i + 1);  

不要忘了在最后使用
free(t)
释放内存您没有在指针“t”中生成malloc,这一行有问题“*t=*s;”

您没有在指针“t”中生成malloc,这一行有问题“*t=*s;”

您没有在指针“t”中生成malloc,这一行有问题“*t=*s;“

您没有在指针“t”中生成malloc,并且在这行“*t=*s;“

我将使用一个函数来更改字符串

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';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i

如果您需要单独使用反向字符串,您可以在调用
reversestr
之前使用
strdup
。顺便说一句:以“str”开头的函数名是为C标准库的函数保留的。

我将使用一个就地更改字符串的函数

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';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i

如果您需要单独使用反向字符串,您可以在调用
reversestr
之前使用
strdup
。顺便说一句:以“str”开头的函数名是为C标准库的函数保留的。

我将使用一个就地更改字符串的函数

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';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i

如果您需要单独使用反向字符串,您可以在调用
reversestr
之前使用
strdup
。顺便说一句:以“str”开头的函数名是为C标准库的函数保留的。

我将使用一个就地更改字符串的函数

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';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i

如果需要单独使用反向字符串,可以在调用
reversestr
之前使用
strdup
。顺便说一句:以“str”开头的函数名“是为C标准库的函数保留的。

您尚未为新字符串分配任何空间
char*t
没有任何内存空间!您尚未为n分配任何空间