繁体   English   中英

反转c中的字符串会导致分段错误

[英]Reversing a string in c results in segmentation fault

我试图在c中反转一个字符串,但是我遇到了段错误,核心转储错误,无法找出错误。

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

void main(){
    char inputstr[100];
    int i = 0;
    char revstr[100];

    printf("Give me something to reverse!!:\t");
    gets(inputstr);
    printf("You entered %s\n", inputstr);

    int lenstr = strlen(inputstr) - 1;


    while(lenstr >= i){
        strcpy(revstr, inputstr[lenstr]);
        lenstr = lenstr -1; 
    }

    printf("%s\n", revstr);
}

我正在尝试在c中反转字符串,但是我得到了分段

strcpy()用于将字符串复制到目标字符串。 因此,参数为char*const char* 但是在您的代码中,您正在发送一个char作为strcpy()函数的第二个参数。

您完全不需要使用strcpy()函数来反转字符串,只需一个for循环就足以实现反转字符串。

for循环示例:

for (i = 0; i <= lenstr; i++) 
{ 
    revstr[i] = inputstr[lenstr - i]; 
} 
revstr[i] = '\0';

strcpy()应该做什么?

这是我的反向版本:

void reverse(char * s, int len)
{
    char c,*end =s+len-1;
    while (s<end)
    {
       c=*s;
       *s++=*end;
       *end--=c;
     }
}

使用XOR,您可以避免声明临时c变量...但是它不可重定义,我很想知道是否可以改善性能...我选择传递len,而不是在内部进行计算,因为您可以反转子字符串,或者因为长度已经可用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM