繁体   English   中英

尝试在 C 中反转字符串时出现分段错误

[英]Segmentation Fault while trying to reverse string in C

我是 C 的新手,遇到了一些问题。 我试图反转 C 中的给定字符串,并且在执行此操作时以某种方式出现分段错误

#include <stdio.h>
#include "my_revstr.h"


int my_strlen(char const str[]){
        int i = 0;
        int count = 0;
        while (str[i] != '\0'){
                count++;
                i++;
}
        return count;
}
void my_revstr(char str[]) {


        int len = my_strlen(str);
        char temp;
        char* ptr = str;
        char test;
        for (int i = 0 ; i < len /2; i++) {
                ptr +=  ptr[i];
                str[i]= str[(len/2)-1];
}
        printf("%s", str);
}
int main() {
        my_revstr("ABCDE");
}

对于初学者,您可能不会更改字符串文字。

my_revstr("ABCDE");

任何更改字符串文字的尝试都会导致未定义的行为。

您需要声明一个由字符串字面量初始化的字符数组并将其传递给 function

例如

char s[] = "ABCDE"; 
my_revstr( s );

尽管如此,无论如何您的 function my_revstr没有任何意义。

由于此语句,它所做的只是更改字符串的前半部分

str[i]= str[(len/2)-1];

而且这个说法

ptr +=  ptr[i];

可以调用未定义的行为。

您的函数可以如下所示

size_t my_strlen( const char *s )
{
    size_t n = 0;

    while ( s[n] ) ++n;

    return n;
}

char * my_revstr( char *s ) 
{
    for ( size_t i = 0, n = my_strlen( s ); i < n / 2; i++ )
    {
        char c = s[i];
        s[i] = s[n - i - 1];
        s[n - i - 1] = c;
    }

    return s;
}

主要是你可以写

int main( void ) 
{
    char s[] = "ABCDE";
    
    puts( s );
    puts( my_revstr( s ) );
}

暂无
暂无

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

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